commit de compras

This commit is contained in:
2026-11-04 09:37:20 +02:00
parent fcf31e8d48
commit 0b05a1192c
741 changed files with 114127 additions and 116 deletions
+2
View File
@@ -1,5 +1,7 @@
# Menus de Contabilidade
Continuação posterior autorizada: [primeiro lançamento contabilístico sintético](GENERAL_LEDGER_DELIVERY.md), com ligação condicionada a direito próprio na unidade. Supera apenas a ausência absoluta do motor no recorte QA; não transforma os restantes menus/relatórios previstos em funcionalidades operacionais nem presume revisão visual.
29/10/2026. Acrescentada a navegação do documento `Menus de contabilidade.docx` ao SGF existente. A entrega é de menu, organização funcional e ligações autorizadas; **não implementa contabilidade geral ou demonstrações financeiras**.
## Fonte e âmbito
+37
View File
@@ -0,0 +1,37 @@
# Referência territorial para segmentação dos cadastros
**Continuação funcional:** o [selector comum, gravação/histórico e segmentação estão agora entregues na composição QA8069](GEOGRAPHY_SEGMENTATION_DELIVERY.md), com83 verificações. As indicações de implementação pendente abaixo descrevem o estado desta preparação inicial; não se aplicam às capacidades demonstradas nesse recorte. Correcção/publicação de versões, migração histórica, utilização real, revisão visual e implantação permanecem separadas.
Fonte fornecida pelo utilizador: `cartografia_moz.xlsx`, declarada como cartografia validada pelo INE. A análise é da versão exacta do ficheiro recebido, não uma verificação independente de validade/vigência nacional. SHA256: `70996d9a9133785a848de90bedb4bf685e24d8f823cd153c0adc43eac642a292`. Não foi modificado nem reexportado.
## Estrutura observada
`Sheet1!A1:H20408`:20.407 registos, sem fórmulas ou linhas ocultas. Campos `ID`, `Provincia`, `Distrito`, `Posto_Administrativo`, `Localidade`, `Bairro_Urbano`, `Aldeia_Quarteirao`, `Designacao`.
| Nível mais detalhado do registo na fonte | Registos |
| --- | ---: |
| Província | 11 |
| Distrito | 148 |
| Posto administrativo | 437 |
| Localidade | 1.334 |
| Bairro urbano | 1.870 |
| Aldeia/quarteirão | 16.607 |
| Total | 20.407 |
Os componentes são códigos de texto, incluindo zeros iniciais e os valores alfanuméricos `7A`/`7B`. O `ID` é único nesta folha; não se presume que seja um código INE estável entre versões. A identidade técnica preparada usa versão da fonte + ID original. Designações e códigos originais ficam intactos.
Foram conservados48 grupos com caminho de códigos repetido,39 dos quais com designações diferentes, e nove registos sem designação. Há8.610 registos sem uma linha correspondente ao pai imediato, abrangendo8.585 caminhos distintos, e377 com mais de um candidato a pai imediato. Isto descreve relações ausentes/ambíguas **na folha recebida**, não prova que um território administrativo seja inválido. Códigos como99 também permanecem intactos, sem significado inventado. Nomes repetidos entre territórios são normais e não servem de chave de associação.
## Preparação implementada
`App\Shared\Geography\Cartography` prepara um catálogo versionado com todas as linhas, componentes, nível, designação, candidatos a pai e pendências. Não funde duplicados, não inventa designações e não executa conteúdo do Excel. A selecção técnica exige chave e versão exactas; recusa nomes soltos, versão antiga e entradas com pendências próprias ou de ascendência. Permite precisão apenas de província quando é essa a informação conhecida. A fonte extraída e o catálogo preparado ficam no directório privado de execução; não se incorporou a carga de dados no repositório nem no destino.
[Prova técnica](proofs/cartography-preparation-20261103.json):16 verificações, incluindo reconciliação dos níveis, conservação integral, zeros, alfanuméricos, duplicados, designações ausentes, selecção explícita, recusa de ambiguidades/versões antigas e preparação determinística. Sem ligação a bases ou atribuição a cadastros.
## Aplicação comum no SGF
Usar um único catálogo de referência para empresas/unidades, clientes, fornecedores e outras entidades. Cada localização deve guardar país, versão da fonte, chave do território, precisão realmente conhecida, finalidade do endereço e endereço livre complementar. Sede, endereço fiscal, estabelecimento e destino de entrega podem ser diferentes; a cartografia não os torna equivalentes.
O formulário deve seleccionar em cascata os níveis disponíveis e exibir pendências da fonte. A associação é uma decisão explícita do cadastro, com permissões e isolamento da entidade, autor/data e histórico. Uma actualização de cartografia cria outra versão e conferência de diferenças, preservando associações históricas. Segmentação e relatórios filtram pelos componentes territoriais da localização escolhida, sem confundir localização com direitos de acesso ou inventar precisão mais fina.
**Ainda não entregue:** tabela/API/selector comuns montados no SGF, ligação dos formulários de empresas/clientes/fornecedores, persistência/histórico das localizações e filtros dos relatórios. O que existe nesta passagem é leitura, preparação do catálogo, contrato de utilização e provas. Não foram atribuídas localizações aos registos existentes, nem alteradas as seis associações protegidas, a cache, acessos ou dados reais. As pendências da fonte exigem conferência antes da activação, sem impedir o desenvolvimento sintético das interfaces.
+23
View File
@@ -0,0 +1,23 @@
# Artefacto financeiro autónomo — composição QA
Continuação funcional do ciclo aprovado, sem novos efeitos financeiros. **Demo própria SGC: http://127.0.0.1:8052/qa/ledger-demo**. Mantém as três funções, uma obrigação60 e nenhum pagamento/lançamento inicial. SGF8050, SGC8051 e demos anteriores permanecem preservados.
Foi acrescentado um artefacto versionado por conteúdo com **25 ficheiros** de runtime de Payables/GeneralLedger e verificador, extraídos da fonte canónica, sem credenciais, bases, fixtures ou suites. Manifesto SHA-256 desta prova: `6a507ea7d708a12a8e526e4c610696d8db84079d18aede470237b65505630e7e`. O pacote foi criado em pasta QA privada; não foi instalado no destino, publicado ou activado no SGC existente.
O host nativo tem agora um ponto de composição explícito em `FinanceBundle::configure`, antes de carregar Payables. Sem configuração de artefacto mantém exactamente o caminho anterior. Com configuração exige ambiente de teste, base/role própria não elevada no cluster55439, manifesto cujo hash está fixado na configuração e hash do carregador. Só depois carrega o verificador e confere todos os ficheiros, caminhos permitidos, duplicações, ausências, alterações, extras e links simbólicos. Falha recusa o arranque; não regressa silenciosamente à pasta antiga. O manifesto é lido/conferido pelos mesmos bytes usados na descodificação.
As chaves novas `common-finance-bundle.root/manifest_sha256` seleccionam fonte de código, **não concedem direitos nem activam contabilidade**. Flags sintéticas continuamfalse nos defaults; ausência de root é o comportamento normal. Configuração real, migrações, cache e pacote instalado continuam intactos. Hashes fixam integridade do conteúdo; não são certificação fiscal ou validação de distribuição comercial.
Provas novas, sem repetir o ciclo inteiro já válido:
- **9 verificações** numa base nativa nova: cinco classes financeiras, incluindo o verificador, carregadas exclusivamente do artefacto; preparação/revisão/aplicação de reconhecimento60 e replay com uma só gravação; duas linhas; totais e fingerprint original de factura/stock/orçamento preservados.
- **6 verificações** do contrato de artefacto: conteúdo válido aceite; ficheiro alterado, ausente, extra, caminho de travessia e hash fixado errado recusados.
- **4 recusas efectivas no arranque do host**: ficheiro alterado, extra, hash errado e carregador alterado. O carregador alterado continha um marcador de execução; o marcador nunca foi produzido. Sem fallback, efeitos de negócio ou alterações à prova original.
- **28 verificações** de preparação do demo8052: três funções, cookies separados, estados iniciais vazios e ligações financeiras/contabilísticas. Sem comandos de negócio na base da equipa.
- PHPStan nível7 nos dois ficheiros nativos novos: zero erros; formatação e sintaxe dirigidas. A cache de análise é privada; não se usou a suite Composer que limpa configuração/cache.
[Manifesto e hashes](proofs/common-finance-bundle-20261103.json). O primeiro construtor encontrou um README opcional ausente em Payables; a cópia incompleta foi retida como diagnóstico, sem arranque ou uso. A construção final exclui ficheiros opcionais inexistentes e exige os bootstraps. Nenhuma prova aprovada foi sobrescrita.
Reprodução: `scripts/finance-bundle-build.mjs` constrói novo artefacto QA; `scripts/finance-bundle-check.mjs` verifica integridade/recusas; `scripts/ledger-cycle-native-run.mjs new-bundle` cria outra base configurada com o hash fixado; fase PHP `native-cycle-bundle` prova o writer do artefacto; `scripts/finance-bundle-boot-check.mjs <tag>` prova as recusas do host. Demo exige outra fixture, `ledger-cycle-native-demo.mjs` e `ledger-cycle-demo-check.mjs native <tag>`. Preservar as fixtures consumidas pelas provas.
O artefacto contém apenas estes dois núcleos; não empacota todo o Laravel, dependências, orçamento, Compras ou instalação comercial. Não se ensaiaram outras plataformas, implantação, actualização de base instalada, carga sustentada, ACLs ou revisão visual. Não é uma passagem operacional de dados entre SGF/SGC. Seis associações, cache, dados/acessos reais, candidatas, demos e trabalho paralelo preservados. Sem publicação, aceitação ou checkpoint presumidos.
+36
View File
@@ -0,0 +1,36 @@
# Usar Compras na instalação local
Abrir **http://127.0.0.1:8085/compras**. Esta é a entrada única do percurso de Compras. Não é necessário conhecer endereços de demonstrações anteriores ou copiar identificadores.
O ambiente é sintético. Escolher uma função e uma etapa; a empresa e unidade aparecem na entrada e no cabeçalho. Para passar a outra função, usar **Entrada de Compras / trocar função**. A opção **Continuar o documento actual** mantém a origem que estava aberta, quando essa função tem acesso. Campos por confirmar são protegidos ao sair e uma confirmação em curso impede a mudança.
## Percurso novo
1. **Compras → Fornecedores:** preparar a ficha com dados sintéticos, referências documentais e próxima revisão. Conferir impacto e confirmar. **Finanças** abre a mesma ficha, confere e decide a activação por outra identidade. Há também três fornecedores QA previamente preparados.
2. **Solicitante → Requisições:** preparar a necessidade, escolher explicitamente o centro autorizado, indicar data, fundamento e linhas. Para experimentar:1UN a100,00MZN, imposto documental0. Guardar e submeter são confirmações distintas. A submissão reserva o montante no orçamento de Compras.
3. **Chefia → Requisições:** abrir a necessidade e aprovar a versão com fundamento. O solicitante não aprova a própria necessidade. A ligação de continuação abre as propostas da mesma requisição.
4. **Compras → Propostas e adjudicação:** registar três propostas de fornecedores elegíveis. Compras e Finanças fazem avaliações individuais; só depois conferir a comparação, escolher expressamente e fundamentar a adjudicação. **Chefia** decide a adjudicação.
5. **Compras → Ordens:** conferir a adjudicação aprovada e o impacto antes de emitir. A ordem conserva fornecedor, linhas, valores e aprovações. A ligação seguinte abre a recepção da mesma ordem.
6. **Armazém → Recepções:** abrir a ordem, marcar as linhas, pesquisar/escolher artigo e armazém, indicar guia/data/quantidades e qualidade. Conferir e confirmar. Só as quantidades aceites geram movimento. Se a resposta se perder, repetir a mesma confirmação recupera o resultado sem duplicar.
7. **Finanças → Facturas:** abrir a ordem, registar número/data e valores do documento recebido, seleccionar as linhas e quantidades e fundamentar a conferência. **Revisor financeiro** valida por outra identidade. Essa validação consome o compromisso uma vez; não reconhece automaticamente a obrigação.
8. **Finanças → Obrigações:** abrir a factura validada, conferir e confirmar a preparação da fotografia. **Revisor financeiro** escolhe essa proposta, confere o reconhecimento e confirma com fundamento. A página passa a apresentar a responsabilidade única e deixa de oferecer nova preparação para o documento reconhecido.
O painel **Percurso de Compras** encontra os documentos existentes por etapa e abre-os directamente. Os históricos e dossiês permitem conferir origens e decisões autorizadas. As listas são filtradas pelas permissões: mudar de função não concede direitos reais nem torna todas as etapas disponíveis ao mesmo utilizador.
## Exemplo já concluído
Está gravado um processo com o fornecedor **Fornecedor Percurso Completo QA**, três propostas100/120/140MZN, duas avaliações por proposta, ordem/recepção1UN, factura100MZN e obrigação100MZN. Pode abrir os documentos nas etapas acima e consultar as decisões. Para praticar outra compra, criar uma nova requisição; não repetir o documento já concluído.
O vencimento dessa obrigação não foi fornecido: permanece **desconhecido**, com atraso indeterminado. Não há pagamento ou contabilização dessa origem. O orçamento sintético é limitado e o motor recusa operações sem dotação; os saldos não são inventados ou reiniciados para permitir testes.
## Voltar a iniciar
Se a página não estiver aberta, executar no PowerShell:
```powershell
& 'C:\laragon\www\sgf-tempo\scripts\abrir-compras.ps1'
```
O comando reutiliza a instalação8085 e não cria bases ou demonstrações. O cluster QA existente tem de estar disponível. O arranque após reinício completo do computador não foi ensaiado nesta entrega.
Esta conclusão cobre aquisição até obrigação no ambiente local. Pagamentos, contabilidade dessa origem, emissão fiscal real, migração histórica e utilização empresarial permanecem fora deste percurso. Revisão visual, carga sustentada e implantação não são presumidas por esta prova funcional.
@@ -0,0 +1,17 @@
# Recuperação de comprovativos financeiros integrada — 03/11/2026
A consulta contabilística por chave passa a oferecer três domínios explícitos: Contabilidade, reconhecimento de fornecedor e liquidação de fornecedor. A escolha nunca procura automaticamente noutro motor. O resultado é histórico, do próprio autor no âmbito actual, não valida dependências actuais nem executa/reenvia comandos.
`GET /api/general-ledger/financial-receipts/{domain}/{key}`, com `domain=recognition|settlement`, reutiliza os motores financeiros e os callbacks de leitura existentes. Exige acesso à Contabilidade e à origem; liquidação exige ainda o direito próprio `payments_view`. Sem herança entre direitos, concessões novas ou activação de Compras. O percurso antigo de comprovativos contabilísticos mantém-se.
`ReceiptReader` restringe os dois domínios a tabelas fixas, filtra tenant/empresa/unidade/autor/chave e exige autorização própria de leitura. Não usa a autorização de comandos como fallback. O host cobre a consulta com `REPEATABLE READ READ ONLY`. Ausência de domínio instalado é recusa explícita, não saldo zero; chave ausente e chave de outro autor não revelam comprovativos. Respostas usam `no-store` e recusam parâmetros de contexto.
O formulário partilhado das páginas contabilísticas permite escolher o domínio, faz só GET, limpa o resultado anterior na recusa e mostra JSON como texto. Não guarda pedidos, não inventa resultado quando a chave falta e não permite executar operações pela consulta. Nenhum novo direito, migração, dependência ou efeito financeiro.
**43 verificações dirigidas** numa base/role nova QA55439 (`6070063f42f2`):13 de serviço,6 do leitor comum,19 HTTP e5 do JavaScript renderizado em Node VM. Cobrem chave igual nos dois domínios, direitos separados/revogados, autor diferente, filtro de tenant/empresa/unidade, domínio inválido, ausência de autorizador de leitura, UUID/contexto/módulo inválidos, ausência de fallback para Contabilidade, transacção só de leitura, zero bloqueios, escape como texto e ausência de repetição automática.
O comprovativo de reconhecimento provém do workflow efectivo de fornecedor60 já aprovado, executado exclusivamente na fixture nova. Para provar colisão de chaves, o comprovativo de liquidação foi inserido como **fixture de infra-estrutura**, com `qa_fixture=true` e `state=no_business_effect`. Não representa preparação, confirmação ou execução de pagamento. Há zero pagamentos na base; a consulta conserva fontes, direitos e contagens dos dois livros de comprovativos. Um auxiliar de teste precisou de capturar explicitamente o contador no closure antes de gerar a prova válida; a tentativa parcial não é contada.
Manifesto: [provas e hashes](proofs/financial-receipt-recovery-20261103.json). Provas anteriores preservadas por hash; suites financeiras e benchmarks alheios não repetidos. Demos anteriores, seis associações, cache bloqueada e trabalho em curso preservados. Sem acessos reais, publicação, activação de Compras ou checkpoint.
Limites: sem arquivo de pedidos perdidos quando a chave já não existe, histórico SGF vivo, comunicação bancária ou nova validação do estado financeiro. Não se instalou esta capacidade no SGC nem se substituíram os pacotes congelados. Revisão visual, carga sustentada e implantação continuam pendentes; HTTP e Node VM não são prova visual ou capacidade operacional.
@@ -0,0 +1,81 @@
# Ciclo contabilístico sintético integrado — entrega local
`COMMON-LEDGER-COMPLETE-CYCLE-SIM-v1`, autorizado expressamente por «Autorizar o ciclo sintético proposto». **Implementação funcional concluída no recorte autorizado**, com demonstrações SGF e SGC separadas. Não equivale a contabilidade geral/fiscal completa ou implantação aceite.
## Demonstrar o ciclo inteiro
| Composição | Entrada persistente | Estado inicial na entrega |
|---|---|---|
| SGF | **http://127.0.0.1:8050/qa/ledger-demo** | Uma obrigação60MZN, sem pagamento, afectação, proposta contabilística, lançamento ou fecho |
| SGC autónomo | **http://127.0.0.1:8051/qa/ledger-demo** | Factura efectivamente conferida no workflow nativo e uma obrigação60MZN, restantes efeitos vazios |
Escolher Preparar/aplicar, Rever com outra pessoa ou Consultar. Cada decisão exige fundamento. As duas instalações são **livros financeiros independentes**, não duas autoridades operacionais para a mesma dívida. O SGC usa o pacote comum local, sem serviço SGF remoto, facturação de vendas SGF ou cópia divergente do motor. O pacote instalado e a configuração operacional do SGC não foram activados/substituídos.
Guião, presente também nas entradas:
1. Capturar reconhecimento contabilístico60, conferir o impacto D `QA-CONTRAPARTIDA` / C `QA-FORNECEDOR`, rever com outra pessoa e aplicar.
2. Abrir liquidações financeiras pelo botão. Registar facto sintético20 com referências únicas `SIM-…`, data29/10/2026, confirmar com outra pessoa, preparar afectação20 e confirmá-la independentemente. Principal60, saldo40. Não há execução monetária.
3. Voltar pelo botão à contabilidade. Capturar a afectação confirmada, rever D fornecedor20 / C `QA-LIQUIDACAO`20 e aplicar. O lançamento **não volta a reduzir o saldo**.
4. Preparar e confirmar a reversão financeira integral da afectação; saldo volta a60. Conferir/contabilizar a reversão: D liquidação20 / C fornecedor20. O original fica conservado.
5. Capturar correcção técnica do lançamento original de reconhecimento: estorno integral60 e substituição integral60, ambos fotografados. Outra pessoa revê o par exacto. Preparador aplica os dois numa transacção, conservando o original e sem alterar dívida/imposto/moeda.
6. Capturar conferência do período `QA-2026-10`, rever com outra pessoa e fechar. Pendências financeiras/contabilísticas impedem fecho; mudança de factos/regras exige nova conferência. Depois de fechado, novas gravações nesse período recusam; consultas e recuperação de recibos existentes continuam disponíveis. **Não existe reabertura.**
Após o ciclo de prova há uma obrigação60, saldo60, cinco lançamentos/dez linhas, débito bruto220/crédito bruto220 e uma versão de período fechado, além da versão aberta original. O valor220 é soma bruta de movimentos incluindo compensações, não saldo financeiro ou nova dívida.
As bases da equipa são distintas das bases de regressão e conservam as decisões futuras. Não usar reset para repetir o guião. Os demos anteriores 8002/8003/8005/8039/8048/8049 e os respectivos dados não foram alterados por esta entrega. A fixture documental SGF continua a ser recibo sintético; só a origem SGC desta composição passa pelo workflow nativo efectivo. Na demonstração SGC, o relógio de preparação foi explicitamente fixado em29/10/2026 para produzir a factura QA dentro do período artificial. Isto não valida políticas temporais/fiscais reais.
## Núcleo único e guardas
O pacote canónico `packages/general-ledger` reutiliza `PayableJournal` para captura, revisão, aplicação, linhas, equilíbrio, unicidade, recibos e auditoria de todos os efeitos. `LedgerCycle` acrescenta a orquestração do par correctivo e do fecho; não contém um segundo writer de lançamentos. O principal original permanece no snapshot; `amount_minor` da afectação/reversão é distinto, evitando contabilizar60 quando foram afectados20.
`CycleSchema::install` é explícito e recusa ledger com propostas/lançamentos existentes. Só foi executado em bases/roles novas no cluster55439. Acrescenta cinco tabelas append-only de grupos/resultados correctivos e conferência/revisão/fecho de períodos. No schema **novo**, o equilíbrio compara o montante explícito do efeito; o schema das demos anteriores não é actualizado no arranque. Constraints diferidas exigem o par correctivo completo no commit; foreign keys incluem âmbito; fecho exige revisão independente e nova versão fechada. Os nove históricos anteriores continuam append-only.
As rotas individuais de revisão/aplicação recusam partes correctivas com409 e orientam para o par. A orquestração usa os mesmos métodos internos, mas grava ambos os lançamentos e o resultado do grupo numa transacção. Falha entre os dois ou depois do recibo faz rollback integral. Mesma chave/conteúdo recupera o resultado; outra chave não duplica o mesmo efeito; conteúdo conflitante é recusado. Direitos e pessoa/contexto actuais são conferidos antes de recuperar recibos.
Fecho captura origens reconhecidas, efeitos confirmados, propostas/decisões/configuração e totais. O hash é calculado por cursores, sem carregar todo o livro em arrays; verificações por origem ainda fazem consultas individuais. Este percurso de escrita **não foi ensaiado a10.000 origens** e não tem capacidade de implantação validada. O fecho não apaga pendências, não inventa lançamentos e não fecha enquanto houver efeitos necessários por conferir/contabilizar. O bloqueio de empresa serializa a revalidação/aplicação.
## Adaptadores, interface e acessos
- SGF: contexto Contabilidade e permissões existentes por tenant/empresa/unidade, com mudança explícita/auditada de módulo para liquidações. Geração anterior de contexto não autoriza comandos novos.
- SGC: organização nativa, funções/acessos financeiros actuais e concessões contabilísticas QA explícitas em `pa_access`. A composição nativa usa `company_id=0/unit_id=0` no contrato comum e isola por tenant; isso não declara suporte de unidades empresariais que o adaptador nativo não possui. Actualiza/verifica actor, pessoa e direitos antes de escrever, respeitando manutenção/contexto de trabalho nativos.
- UI comum em `packages/general-ledger/ui/cycle.php`, servida pelos dois adaptadores. Propostas, impactos, fontes financeiras confirmadas, correcções, conferências de período, linhas e histórico. Listas limitadas a25, totais sobre o conjunto correspondente. Navegação considera também páginas de eventos/propostas, mesmo quando já não há mais lançamentos. O par inclui as duas fotografias mesmo que uma proposta esteja fora da página do diário.
- A consulta do workspace completo usa uma transacção própria `REPEATABLE READ READ ONLY`, sem `FOR UPDATE`. Leituras iniciadas dentro de transacções participam nelas; os comandos conservam bloqueios e estado actual. O percurso financeiro legado do SGC mantém o seu contrato anterior de leitura; não se afirma que todas as suas páginas foram convertidas para o novo leitor sem bloqueios.
Os dez direitos contabilísticos são os quatro anteriores e os seis novos aprovados: `view/prepare/validate/post`, `correct_prepare/correct_validate/correct_post`, `period_prepare/period_validate/period_close`, todos com prefixo `general_ledger.`. **12 concessões por fixture nova**: preparador7, revisor4, consulta1. Direitos de liquidação existentes reutilizados apenas QA: `payments_view`, `payment_prepare/payment_confirm`, `allocation_prepare/allocation_confirm`, `reversal_prepare/reversal_confirm`; preparação e confirmação são distintas. Nenhum direito ou acesso real/público foi concedido.
Ambos os destinos mantêm flags de ciclo e uso sintético **false**; path nativo por defeito é null. A composição QA fornece o pacote explicitamente. Não foram criadas migrações no destino, dependências novas ou emissão/contas reais. O SGC recusa a capacidade se o pacote não estiver composto, em vez de recorrer a um motor alternativo.
## Provas e condições
[Manifesto, fontes e hashes](proofs/common-ledger-complete-cycle-20261102.json). As datas referem-se à autorização; a execução prolongou-se pela sessão local seguinte. Segredos, cookies, configurações e logs ficam apenas na área QA privada.
| Prova | Resultado |
|---|---|
| Ciclo SGF com falhas/versões/revogação, todo revertido | 23 verificações |
| Mesmo contrato pelo adaptador SGC, todo revertido | 23 verificações |
| Segurança adicional: própria pessoa, direito correctivo revogado, bypass individual, par órfão no commit, falha depois do recibo, append-only nas cinco tabelas | 18 verificações, revertidas |
| HTTP SGF, decisões financeiras e contabilísticas reais no kernel | 70 verificações; um ciclo completo conservado |
| HTTP SGC, mesmo percurso no host nativo | 61 verificações; um ciclo completo conservado |
| Pós-verificação de leitura, conservação, guardas individuais e navegação longa | 10 SGF +10 SGC; sondagens novas revertidas |
| Preparação das duas demonstrações, sem comandos de negócio | 28 SGF +28 SGC |
| Regressão do primeiro efeito, afectado pela generalização do writer | 8 cenários/74 asserções, numa base nova, sem reset das provas anteriores |
As contagens acima identificam execuções e não devem ser somadas como testes únicos independentes: há verificações sobrepostas dos mesmos contratos. Uma execução adicional persistente do contrato SGC tem16 verificações e conserva o livro fechado; não acrescenta cobertura única à tabela.
Análise estática nativa dirigida aos quatro ficheiros alterados: PHPStan nível7, **zero erros**, com bootstrap do pacote comum e cache exclusivamente privada. Foram corrigidos tipos de retorno/arrays e a verificação explícita de utilizador interno, impedindo que uma conta de candidatura seja passada ao adaptador. Formatação dirigida com Pint; verificação de sintaxe dos ficheiros afectados registada no manifesto. Não se executou o script geral Composer que limpa configuração/cache.
Complemento após essa correcção: **cinco verificações** dos controladores confirmaram recusa403 de conta de candidatura nas três entradas e na ligação financeira, consulta200 com utilizador interno e fingerprint financeiro igual. Não se repetiram as sequências HTTP de negócio válidas.
**Concorrência real: cinco trabalhadores, ligações distintas.** Dois correctores aguardaram em `companies FOR UPDATE`, com cadeia de bloqueio observada por `pg_blocking_pids`; após libertação ambos receberam o mesmo resultado, com um par e cinco lançamentos totais. Um fecho aguardou enquanto o pai acrescentava uma versão de regra; após commit recebeu409 por evidência desactualizada, sem fechar. Nova captura e revisão permitiram dois fechos concorrentes: ambos recuperaram o mesmo fecho, exactamente uma versão fechada e um recibo factual. Não se atribuiu a espera a gargalo de auditoria nem se resolveu a divergência aumentando apenas o timeout.
As falhas injectadas existem só em callbacks CLI de teste, não em parâmetros HTTP. Foi comprovado rollback após o primeiro lançamento do par, após o recibo e após acrescentar a versão fechada. O teste do par órfão exerceu a constraint SQL; a guarda pública posterior409 foi comprovada nas verificações finais. Diagnósticos do auxiliar de preparação do demo corrigiram expectativas de texto e de formulário do revisor sem propostas; não houve decisão de negócio ou reset nessas tentativas.
No SGC, fingerprints dos documentos/itens/pagamentos externos/stock/orçamento originais mantiveram-se. No SGF, dívida e direitos foram conservados pelas consultas e sondagens revertidas. As seis associações protegidas e a cache bloqueada não foram consultadas para decisão, alteradas ou limpas. Provas válidas de carga, fila e liquidações anteriores foram reutilizadas por hash; não se repetiram matrizes/suites alheias.
## Limitações que continuam separadas
Este recorte só suporta MZN, imposto0, três contas artificiais, reconhecimento60, afectação/reversão20 e correcção técnica integral do reconhecimento, sem mudança comercial. Não há reabertura, plano PGC real aprovado, contabilidade de vendas/IVA/stock/salários, correcção comercial do principal, execução monetária, reconciliação bancária ou fecho legal geral.
O reconhecimento/fecho sintético não valida fiscalidade, exigibilidade, data contabilística real, adopção de pacote instalado ou passagem operacional de responsabilidade. Revisão visual pela equipa, feedback, aceitação e avaliação de carga/implantação permanecem pendências próprias. Nenhum benchmark novo ou índice foi criado. A leitura financeira anterior de páginas25/100 nos volumes1.000/5.000/10.000 conserva as provas existentes; o relatório integral ainda tem a limitação observada de cerca de12,6s para10.000 posições.
Sem publicação/push, activação de Compras, novo checkpoint ou aceitação presumida. A autorização funcional foi usada para concluir este ciclo conjuntamente, sem pedir confirmação de cada passo técnico.
@@ -0,0 +1,31 @@
# Ciclo contabilístico sintético integrado — recorte para decisão
02/11/2026. **Autorização expressa recebida: «Autorizar o ciclo sintético proposto». Implementação local concluída no recorte aprovado.** Continuação agrupada do [percurso funcional financeiro → lançamento](SGF_FINANCIAL_LEDGER_FLOW_DELIVERY.md). O texto de decisão abaixo conserva o recorte autorizado; não é um pedido pendente de nova aprovação. Entrega, demonstrações e limites em [GENERAL_LEDGER_COMPLETE_CYCLE_DELIVERY.md](GENERAL_LEDGER_COMPLETE_CYCLE_DELIVERY.md).
## Porque a decisão é necessária
O [AGENTS.md](../AGENTS.md), primeira instrução do lançamento, delimita a autorização anterior: «não autoriza lançamentos/contas/direitos reais, migração no destino, fecho/reabertura, novos efeitos de pagamentos, activação de Compras, publicação, aceitação ou checkpoint». O [recorte primeiro](GENERAL_LEDGER_FIRST_SYNTHETIC_SCOPE.md) exclui também correcção/estorno e composição contabilística autónoma. O desenvolvimento técnico do primeiro efeito e das suas ligações está concluído no âmbito demonstrado; não se presume autorização destes novos efeitos.
## Uma entrega funcional, com bases novas e decisões individuais
`COMMON-LEDGER-COMPLETE-CYCLE-SIM-v1`: autorização conjunta proposta para construir e demonstrar o seguinte ciclo, sem aprovações intermédias de cada ligação técnica:
1. **Liquidação sintética de 20 MZN sobre a obrigação QA de 60 MZN.** Reutilizar os comandos e decisões independentes do núcleo de liquidações, sem execução monetária/bancária. Só a afectação efectivamente confirmada é origem do efeito contabilístico. Principal permanece 60 e saldo financeiro passa a 40. Facto de pagamento sem afectação confirmada não lança automaticamente contra o fornecedor.
2. **Lançamento da afectação confirmada**, proposta/revisão/aplicação distintas: débito 20 em `QA-FORNECEDOR`, crédito 20 em nova conta artificial de movimento `QA-LIQUIDACAO`. A conta não representa uma conta bancária real, dinheiro verificado ou reconciliação. Uma única aplicação por afectação factual e tipo de efeito; fotografia/versionamento e autor/fundamento conservados.
3. **Reversão financeira e contabilística ligada.** Reutilizar o circuito financeiro existente de reversão independente; quando a reversão confirmada for contabilizada, débito 20 em `QA-LIQUIDACAO`, crédito 20 em `QA-FORNECEDOR`. Preservar afectação, lançamento e decisões originais. Saldo financeiro volta a 60; nenhuma reversão implícita da obrigação original. Contabilização em falta fica pendência visível, nunca compensação silenciosa.
4. **Correcção técnica de um lançamento de reconhecimento**, sem mudar a dívida: proposta de correcção captura o lançamento de 60 e a razão; revisão distinta aprova exactamente um par atómico de estorno integral (D fornecedor/C contrapartida) e substituição integral (D contrapartida/C fornecedor), 60 MZN cada. Novos efeitos correctivos referenciam o original e a decisão; não reutilizam uma nova chave para furar a unicidade do efeito de reconhecimento. O original não é editado/apagado. Alteração comercial de principal, imposto ou moeda fica fora desta proposta.
5. **Fecho do período QA**, preparado e revisto por pessoas distintas: fotografia do conjunto de origens/lançamentos/pendências e igualdade D/C; impedir fecho enquanto houver efeitos confirmados obrigatórios sem conferência, inconsistências ou propostas necessárias não resolvidas. Aplicação revalida a fotografia numa transacção; nova origem/lançamento/decisão exige nova conferência. Após fecho, bloquear novos lançamentos nesse período, mantendo leitura e recuperação dos recibos existentes. **Reabertura continua excluída** deste recorte; não é necessária para demonstrar o ciclo fechado.
6. **Duas composições QA sobre o mesmo núcleo**, adaptador SGF e adaptador autónomo SGC. Reutilizar o pacote canónico, sem cópia divergente do motor, pacote instalado substituído, candidata activada ou dependência de SGF remoto. Bases de prova separadas representam livros independentes; não apresentar a mesma dívida como responsabilidade financeira operacional nos dois hosts.
7. Uma demonstração persistente própria, com entrada, papéis, referências e pendências ligadas, permitindo executar o ciclo completo. Base de regressão separada; histórico mantido, sem reset do demo para ocultar decisões.
## Direitos propostos antes de concessão
Conservar `general_ledger.view/prepare/validate/post` apenas QA. Novos direitos propostos, **apenas em novas fixtures**: `general_ledger.correct_prepare`, `general_ledger.correct_validate`, `general_ledger.correct_post`, `general_ledger.period_prepare`, `general_ledger.period_validate`, `general_ledger.period_close`. Separar preparador/aplicador do revisor por conta **e pessoa**. Reutilizar os direitos explícitos existentes de liquidação/reversão exclusivamente nas identidades QA necessárias, enumerados na preparação da fixture, sem conceder novos acessos empresariais ou direitos públicos. Consulta não herda comandos; contexto financeiro não concede contabilidade.
## Critério de conclusão e exclusões
Entregar código, interfaces, dois adaptadores, guião único, relatório de pendências, testes afectados e prova end-to-end do reconhecimento60 → afectação20/saldo40 → contabilização → reversão/saldo60 → correcção técnica com originais → fecho. Incluir tenant/empresa/unidade indevidos, revogações, auto-revisão, versões alteradas, concorrência, repetição com mesma/outra chave, falhas em cada fronteira atómica e recuperação sem duplicação; fontes e montantes exactos devem reconciliar. Ensaios anteriores válidos reutilizados, sem repetir suites alheias.
Contas/períodos/regras artificiais; bases/roles novas no cluster55439; sem tocar seis associações pendentes, cache bloqueada, demos existentes ou trabalho alheio. Sem emissão/fiscalidade real, novas contas/concessões/dados reais, operações monetárias, reconciliação bancária, valorização/efeitos de stock/orçamento, reabertura de período, migração no destino, activação de Compras, publicação, aceitação/checkpoint presumidos. Revisão visual e capacidade de implantação continuam separadas.
**Decisão pedida:** autorizar este ciclo sintético agrupado e os direitos exclusivamente QA acima. A autorização abrange a implementação e as provas deste recorte, não a sua aceitação posterior ou utilização real.
@@ -0,0 +1,48 @@
# Composição financeira integrada — entrega local de 03/11/2026
Vendas/recebíveis, obrigação a fornecedor e correcção de custo directo passam a funcionar na mesma empresa/unidade, livro e período QA. Reutilizam exclusivamente os efeitos e workflows já autorizados. Não se criou outro motor nem um novo tipo de efeito financeiro.
Demonstração inicial preservada: **http://127.0.0.1:8057/qa/cost-demo**. O guia permite entrar como preparador, validador ou leitor e abrir o painel `/general-ledger/workspace`. Cada origem tem ligação ao seu percurso efectivo. A base/role são próprias no cluster isolado55439; a aplicação de destino e as demonstrações anteriores não foram migradas.
## Resultado funcional
| Origem | Percurso efectivo | Resultado final da regressão |
|---|---|---|
| Comercial/recebíveis | Factura de teste862,07+137,93=1000; abertura documental revista; recebimentos confirmados/afectados400 e600; reversão400; reconhecimento/afectações/reversão no mesmo writer | 4 lançamentos,9 linhas; bruto2400 por lado; saldo financeiro/conta cliente400 |
| Oficina/custo directo | Original100+175=275 validado e lançado; taxa material sucessora60 e cálculo120+175=295 validados; estorno275/substituição295 indivisíveis | 3 lançamentos,6 linhas; bruto845 por lado; saldo custo295 |
| Fornecedor | Recibo sintético controlado já reconhecido pelo núcleo Payables; reconhecimento contabilístico60, revisto distintamente | 1 lançamento,2 linhas; bruto60 por lado; obrigação financeira permanece60 |
| Conjunto | Uma conferência, revisão distinta e fecho QA no mesmo período | **8 lançamentos,17 linhas,3305MZN de débitos e créditos** |
Os IDs numéricos coincidem entre factura, ordem e obrigação; os filtros tipados continuam a separar os três domínios. A contabilização não desconta novamente os saldos financeiros. Factura/PDF, apontamentos, decisões de custo, original275, outbox e direitos mantêm-se imutáveis durante o percurso contabilístico.
## Painel e integração
`LedgerComposition` oferece cartões de origens e diário conjunto em transacção `REPEATABLE READ READ ONLY`, sem bloqueios de escrita. Cada painel, diário e lista de conferências tem página própria de25 registos. A navegação conserva os restantes filtros/páginas. As dependências e metadados são consultados em conjuntos delimitados pelos IDs da página; não se executa uma conferência completa por cartão nem se carrega o catálogo inteiro de contas.
Os cartões mostram decisões e lançamentos **registados**, sem os apresentar como nova validação de dependências. O principal de fornecedor está identificado como principal, não saldo. A conferência actual e a prévia do impacto continuam nos percursos das origens e nos comandos existentes. Fonte indisponível devolve503; acesso de origem ausente oculta o painel, sem linhas ou contagens. A consulta histórica do livro mantém o direito contabilístico próprio. Acções de período são ocultadas quando falta consulta a uma das origens.
O fecho não depende dos cartões ou da página visível: o serviço existente volta a conferir todas as fontes compostas. Recusa com perda de direito ou alteração de versão, incluindo sucessora295→295 com novas taxas/cálculo. Depois de remover a alteração de ensaio, a mesma operação termina uma única vez; repetições com mesma/outra chave não duplicam o fecho.
O instalador `SalesSchema` para **livros novos vazios** restringe três linhas ao tipo `sales.invoice`; os restantes efeitos conservam duas. A prova SQL adversarial cria, apenas dentro de rollback, uma proposta/revisão/cabeçalho coerentes de custo com crédito repartido em duas linhas: a soma é correcta, mas `gl_assert_balanced` recusa a terceira linha. Não se actualizaram os schemas das demos antigas. O escritor PHP e os efeitos aceites permanecem os mesmos.
## Provas dirigidas
Manifesto verificável: [common-ledger-composition-20261103.json](proofs/common-ledger-composition-20261103.json).
- `2d5c71abf625`:7 casos/37 verificações, todos em rollback: painéis, direitos revogados, contextos elegíveis de unidade/empresa/tenant diferentes,26 perímetros SQL explicitamente artificiais para páginas25+1, falha de fonte, guarda e cardinalidade SQL. Páginas com25 e1 registos usam igual número de consultas. As linhas sem cálculo permanecem pendentes, sem zero/aprovação fabricados.
- Mesma base de regressão, depois das provas de rollback:31 verificações do percurso efectivo completo, revalidação dos três domínios no fecho, mesma quantia com versão diferente, repetição/recuperação e reconciliação final.
- HTTP real em regressão aberta:36 verificações; regressão fechada independente `01aab3ebad2d`:35. Autenticação, CSRF, contexto/módulo, parâmetros, paginação, links, ausência de formas de decisão para leitor/período fechado e transacção de leitura sem bloqueios.
- Demo nova `fe42e1169ce6`:34 verificações de três perfis, links efectivos, entradas/contextos e quatro verificações do JavaScript renderizado em Node VM. Sem comandos de negócio. Impressão digital antes/depois dos dados/origens/outbox/direitos/livro confirma preservação.
- Total173 verificações dirigidas, incluindo os quatro ensaios de formulário simulados. Node VM e HTTP **não constituem revisão visual**. Sintaxe e `git diff --check` nos dois repositórios. Provas válidas de concorrência/falhas dos escritores, fornecedores nativos e pacotes congelados reutilizadas por hash; não repetidas.
Na demo8057 só o original275 está lançado. Factura1000 e obrigação fornecedor60 existem, mas abertura de recebíveis, lançamentos adicionais, par correctivo e fecho continuam por decisões individuais. As regressões completas usam bases diferentes. Não há reset automático.
## Limites e preservação
São quatro módulos compostos neste percurso: Comercial, Financeiro, Oficina e Contabilidade. Compras e Stock não foram activados. O recibo de fornecedor é uma origem controlada de ensaio, não ligação histórica SGF nem importação real. Orçamento/CIF industrial, stock valorizado, salários e cadeias adicionais de correcção não se tornam contabilizados por esta composição.
As primeiras três tentativas de instalação depois da restrição de cardinalidade falharam por sintaxe SQL e permaneceram diagnósticas; não são provas válidas nem foram reutilizadas/resetadas. A tentativa seguinte `b8be625f9a43` completou o percurso, mas um pós-teste usava nome de filtro incorrecto; a sua saída parcial não é contada como sucesso. As provas finais acima foram executadas em fixtures novas, com publicação do comprovativo só depois das verificações finais. Logs privados conservados, sem credenciais versionadas.
Seis associações protegidas, cache bloqueada, demonstrações anteriores e trabalho alheio preservados. Sem concessões reais/públicas, migração no destino, activação de Compras, publicação, aceitação ou checkpoint presumidos. Revisão visual, carga sustentada da composição e capacidade de implantação permanecem pendentes independentes. Os resultados pequenos de integração não demonstram capacidade operacional.
Continuação posterior expressamente autorizada e [entregue em bases novas: lote industrial/CIF1800](GENERAL_LEDGER_INDUSTRIAL_DELIVERY.md). A presente entrega e a demo8057 conservam o seu âmbito de três famílias de origem; a8058 acrescenta a ligação industrial. O manifesto anterior conserva o estado histórico à data da sua emissão.
+61
View File
@@ -0,0 +1,61 @@
# Obrigação reconhecida → primeiro lançamento contabilístico sintético
02/11/2026 — `COMMON-LEDGER-PAYABLE-SIM-v1`. **Código funcional, interface, integração e provas locais entregues** no recorte expressamente autorizado pelo utilizador: «Autorizar o incremento sintético proposto». [Âmbito autorizado](GENERAL_LEDGER_FIRST_SYNTHETIC_SCOPE.md). A autorização permite este desenvolvimento/fixture; não presume aceitação funcional ou checkpoint.
## Percurso implementado
O núcleo único `packages/general-ledger` recebe do adaptador SGF a obrigação já reconhecida pelo Payables, conferida de novo pela identidade factual, reconhecimento/revisão e âmbito exactos. Não recebe um saldo de relatório ou um estado de factura como autorização de lançamento. O principal vem da origem: **60,00 MZN**, imposto documental 0, vencimento desconhecido. O cenário inicial não tem pagamentos. Não se atribuiu uma regra contabilística real à Tempo nem se modificou a obrigação financeira.
Uma regra e período de ensaio explícitos capturam **D 60,00 em `QA-CONTRAPARTIDA` / C 60,00 em `QA-FORNECEDOR`**, em 29/10/2026 no período artificial `QA-2026-10`. As duas contas são de movimento, artificiais e em MZN. Não representam contas PGC aprovadas, inventário/despesa/IVA inferidos, uma regra fiscal ou saldo por liquidar.
1. Preparador propõe obrigação/data/regra/período e fundamento. Fica guardada uma versão imutável da fonte, configuração, linhas e impacto; ainda não há lançamento.
2. Outra identidade **e pessoa** aprova ou recusa a revisão exacta, com fundamento. A aprovação financeira da obrigação não substitui esta conferência contabilística. Recusa e versões anteriores permanecem preservadas.
3. O preparador autorizado aplica apenas a versão revista. A aplicação volta a verificar direitos, pessoa, contexto, fonte, regra/período/versões, moeda e equilíbrio. Mudança exige nova conferência. Cabeçalho, linhas, auditoria e recibo de repetição ficam na mesma transacção.
4. O lançamento liga à obrigação, proposta, revisão, regra e período aplicados. A interface conserva a fotografia mesmo quando a proposta fica noutra página, apresenta o comprovativo e deixa de oferecer uma segunda aplicação. Para abrir a posição financeira actual, muda-se explicitamente para Compras; não se contorna a separação modular.
Unicidade pela identidade factual do efeito e âmbito, independente da chave de pedido ou revisão. Duas aplicações concorrentes ou outra chave para a mesma aplicação recuperam **o mesmo lançamento**. Conteúdo incompatível recusa 409. Um recibo já gravado continua recuperável depois de o período fechar em dados adversariais de ensaio, sempre com a autorização actual, sem nova gravação. Não existe interface de fecho/reabertura ou de edição de lançamentos.
## Base, direitos e navegação
Configuração `general_ledger.synthetic_enabled=false` por defeito, sem activação por variável de ambiente. A guarda exige `payable-testing`, base/role QA próprias, loopback, cluster de regressão 55439 e role sem poderes administrativos. Nenhuma migração ou concessão foi aplicada no destino. Esquema instalado explicitamente numa **base nova**, separada dos livros/demos anteriores; não há criação/reparação por acesso à página.
Quatro direitos autorizados, apenas nas fixtures: `general_ledger.view/prepare/validate/post`. São **seis concessões por fixture**: preparador view/prepare/post, validador view/validate, consulta view. Reutilizam-se contexto, membros, permissões e identidade de pessoa existentes; não há herança de Administração, Financeiro ou nomes. Consumir a fonte exige também os acessos de leitura financeira explícitos já presentes nessas identidades QA. Não foi alargado o catálogo público de concessões reais.
As novas rotas pertencem a **Contabilidade**, mantendo os seis módulos e Início/Opções gerais: `/general-ledger`, `GET /api/general-ledger`, `POST /api/general-ledger/prepare|validate|post`. O menu mostra a ligação de ensaio só com `general_ledger.view` na unidade. Módulo errado ou geração antiga de contexto recusa 409. O pacote instalado de Compras não foi substituído/activado; o adaptador nativo permanece por construir no seu âmbito próprio.
Consulta por período/conta, diário e histórico em janelas de 25. Totais incluem todas as linhas do filtro, não apenas a página. Período ou conta indisponíveis são recusados em vez de aparentarem saldo zero por falta de configuração. Leitura HTTP usa fotografia `REPEATABLE READ READ ONLY`, sem bloqueios de escrita. Não se adicionaram dependências.
## Integridade e provas
Nove tabelas próprias, todas append-only. Chaves estrangeiras compostas protegem o âmbito de contas/linhas/revisões. Checks impedem montantes negativos, cabeçalho desequilibrado e terceira linha. A validação imediata do núcleo e um constraint trigger diferido conferem duas linhas, contas de movimento, moeda, fonte/fotografia exactas, revisão aprovada e independente e preparador/aplicador. O papel QA é proprietário da base nova; isto não valida endurecimento de papéis/schema para implantação real.
- **Oito cenários, 74 asserções**, seleccionando a execução final válida: circuito completo, impacto antes da aplicação, conciliação de período/contas, independência por utilizador/pessoa, recusa, preparador de outra identidade, direitos revogados, pessoa trocada, versões de fonte/regra/período/captura/revisão, moeda, conta agregadora, âmbito estrangeiro e campos injectados.
- Repetição pela mesma/outra chave; recibo após período alterado; falhas injectadas depois do cabeçalho, linhas, evento e recibo. Rollback integral e recuperação sem duplicação em cada ponto. Nenhum controlo de falha é exposto pela API/configuração.
- Base recusou escrita directa de cabeçalho desigual, principal incompatível, linha em falta, conta estrangeira, terceira linha e alteração de qualquer tabela do histórico. PostgreSQL usa savepoints nos casos esperados; uma transacção abortada não foi contada como recusa funcional.
- **Concorrência real em dois processos:** ambos aguardaram a empresa, com cadeia confirmada por `pg_blocking_pids`/`pg_stat_activity` em `companies FOR UPDATE`. Após libertação, ambos devolveram o mesmo ID. Resultado persistido na base QA: **um lançamento, duas linhas, um evento de aplicação**. Repetição posterior recuperou o recibo sem novo efeito.
- **23 verificações HTTP reais:** autenticação, consulta/totalização, duas contas, três rotas de comando recuperando os recibos originais de preparação/revisão/aplicação, outra chave para o mesmo efeito, conflito de conteúdo, permissões, conta/período indisponíveis, 422/403/409, CSRF 419, módulo errado e `no-store`. O circuito de criação/revisão/aplicação foi exercitado pelos serviços e processos reais; no HTTP verificaram-se recuperação/delegação e recusas, sem alegar criação de outro lançamento para repetir a prova.
- Três verificações estáticas dirigidas de permissão/renderização do menu, build de produção **privado** e renderização final Blade. Assets/manifesto QA foram servidos pelo router loopback de prova. Não se substituiu o manifesto público das demos.
O teste geral de navegação não terminou e foi interrompido. **Não é uma prova aprovada.** Não se alterou o trabalho alheio para o fazer passar, não se limpou cache e não se repetiu uma via de navegador. A ligação nova foi validada pelos testes dirigidos, build e recusas HTTP; revisão visual/interacção no navegador permanece pendente.
[Manifesto, resultados e hashes](proofs/common-ledger-payable-20261102.json). O texto exacto da proposta autorizada é recuperado e arquivado por SHA-256; a nota de autorização posterior não altera o recorte. As provas financeiras anteriores são conferidas por hash, sem reexecutar as suites alheias.
O primeiro diagnóstico de preparação identificou um erro no fingerprint do harness (`company_memberships` tem chave composta, não coluna `id`). A fixture foi conferida e recuperada sem repetir schema/concessões/reconhecimento; essa base ficou como diagnóstico. A prova final usa outra base nova com todos os constraints finais. Uma asserção de soma SQL foi ajustada para comparar o valor inteiro devolvido como `numeric`, sem mudar os montantes. Execuções diagnósticas não contam como aprovadas; não houve reset/remoção dos seus dados.
## Preservação e reprodução
**Demonstração própria para a equipa:** [http://127.0.0.1:8048/qa/ledger-demo](http://127.0.0.1:8048/qa/ledger-demo), apenas em loopback. Outra base/role QA, sem usar a base das provas. Tem uma obrigação reconhecida de 60 MZN e, no momento da entrega, **zero propostas e lançamentos**. Escolher Preparar/aplicar, Revisão ou Consulta na página; obrigação #1, data 29/10/2026, período/regra de ensaio já apresentados. A equipa pode executar o circuito e registar feedback; não foi atribuída aceitação ou revisão visual.
São 13 verificações adicionais de preparação do demo, sem operações de negócio: três identidades, interfaces e consulta da fixture ainda vazia. Cookie de sessão específico e nenhum `XSRF-TOKEN` global substituído; um complemento confirmou CSRF 419 e recusa de escrita 403 com token válido. A validação CSRF permanece activa e as formas usam o header explícito. Assim, autenticação/cookies das demos anteriores não são substituídos. Build copiado apenas entre as duas pastas privadas de assets; manifesto público original preservado.
`scripts/ledger-demo.mjs <tag>` inicia apenas um servidor próprio numa porta loopback livre ou reconhece o existente, sem repetir a preparação. Estado/PID e logs ficam na pasta privada. Não reiniciar/apagar dados para repetir a demonstração; a base da regressão conserva separadamente o único lançamento comprovado.
Fingerprint de origens/obrigações/decisões/recibos financeiros, concessões e membros igual ao baseline da fixture, antes/depois de todos os ensaios. O Payables continua a ter uma obrigação de 60 MZN; o diário é outro efeito, não uma segunda dívida. Stock/orçamento **não têm tabelas nesta composição mínima**, pelo que não se inventou uma prova de exercício desses motores. O núcleo não chama os seus escritores. Dados/roles/demos anteriores não foram escritos; os seis registos protegidos e a cache bloqueada não foram objecto de decisão/limpeza.
Preparação: Node fixado, `scripts/ledger-run.mjs` cria a nova base/role e configura apenas as identidades QA. Fases nomeadas recusam repetir provas concluídas. `scripts/ledger-ui-check.mjs <tag>` compila/renderiza apenas em storage privado; `scripts/ledger-http.mjs <tag>` cria e encerra só o seu servidor de prova loopback 8047. O demo 8048 é um processo/base distintos, conservados para a equipa. `scripts/summarize-ledger.mjs <tag>` consolida sem voltar a executar testes. Settings, passwords, cookies, UUIDs de repetição e logs ficam privados. Não se criou checkpoint.
## Limites mantidos
Primeiro efeito de reconhecimento apenas, sem importação/lançamento histórico automático, IVA/contas reais, classificação de compras, pagamentos/recebimentos contabilizados, integração nativa SGC, valorização de stock, correcção/estorno, fecho/reabertura, reconciliação ou contabilidade geral completa. O período fechado foi só uma mutação adversarial de fixture, revertida, não uma funcionalidade operacional.
Configuração/fonte futura deve seguir a mesma ordem de bloqueio da empresa; não há API de escrita de configuração neste incremento. Não foram medidos volumes sustentados ou implantação; o relatório financeiro anterior conserva a limitação de 12,6 s para 10.000 posições. Sem publicação, activação de Compras ou concessões reais. Revisão visual, aceitação e capacidade de implantação continuam separadas.
@@ -0,0 +1,70 @@
# Correcção de custo directo275→295 — entrega sintética
03/11/2026. `COMMON-LEDGER-DIRECT-COST-CORRECTION-SIM-v1` implementado após «Autorizar a correcção sintética proposta», conforme o [recorte apresentado](GENERAL_LEDGER_DIRECT_COST_CORRECTION_SCOPE.md). Inclui código funcional, interface, testes e demonstração própria. Não equivale a aceitação, checkpoint, uso real ou conclusão operacional de toda a aplicação.
## Resultado
O cenário novo executa os workflows existentes: oficina/origens verificadas, taxas e composição100+175=275, revisão distinta e lançamento original275. Depois prepara/aprova taxa material sucessora60MZN/UN e cálculo **120+175=295**, preservando as versões anteriores. Não fabrica a decisão de custo por SQL.
O núcleo contabilístico comum captura, revê e aplica **um par indivisível**:
| Parte | Débito | Crédito |
|---|---|---|
| Estorno do original | QA-COMPENSACAO-ENSAIO275 | QA-CUSTO-DIRECTO275 |
| Substituição actual | QA-CUSTO-DIRECTO295 | QA-COMPENSACAO-ENSAIO295 |
O original permanece. O resultado comprovado é **três lançamentos/seis linhas**, movimentos brutos **845MZN por lado** e saldo do custo **295MZN**, diferença20. Balancete e razão reconciliam este mesmo livro e ligam à ordem/conferência. A validação do custo ou a outbox não desencadeiam contabilização automática.
## Núcleo, SQL e actualidade
Reutiliza `correct-prepare/validate/post`, tabelas de grupos/resultados, writer, recibos e histórico existentes. Os tipos `workshop.direct_cost.reversal/replacement` são distintos de `journal.reversal/replacement` dos fornecedores. Os filtros continuam tipados por `cost_order_id` ou obrigação de fornecedor; IDs inteiros coincidentes não juntam os domínios.
`CostCorrectionSchema` só instala em **livro SGF QA novo e vazio** com a composição de custos presente. Acrescenta marcador de capacidade e constraints diferidas para o par de custos. Confere original, âmbito, grupo, propostas, tipos de origem, período, datas, contas, ligação à mesma ordem/perímetro, revisão de substituição e reversão integral das linhas originais. O estorno deve igualar275 do original; a substituição deve corresponder ao295 capturado/revisto. Não exige igualdade entre os montantes das duas partes. A função antiga de integridade mantém a sua validação de fornecedores e delega apenas resultados explicitamente de custos à nova verificação. Demos/schemas anteriores não são actualizados.
A aplicação pública recusa revisão ou lançamento individual das partes. A base também recusa uma reversão isolada mesmo que equilibrada e com fotografia revista. Fonte/regra/período/âmbito/pessoa/direitos são revalidados sob o bloqueio de empresa antes de aplicar; recibo, dois lançamentos, linhas, histórico e resultado são uma transacção única. Uma falha depois da primeira parte ou depois do resultado desfaz a tentativa inteira.
A identidade do grupo liga ao lançamento original, com unicidade e repetição independente da chave. Uma nova versão de taxa/cálculo muda a fotografia mesmo quando o valor continua295: exige nova captura e conferência. Capturas anteriores ficam no histórico, assinaladas como superadas na interface. Uma correcção aplicada não pode ser repetida como outra correcção do mesmo original neste recorte.
A conferência do período resolve o original pela **substituição efectivamente aplicada no grupo**, comparando a sua revisão de fonte com o cálculo actual. Não basta que os totais coincidam. Uma fonte alterada depois do par volta a bloquear o fecho e não cria uma cadeia automática de revalorizações. Correcção anterior à data do original, noutro período ou em período fechado é recusada; não há reabertura.
## Interface e permissões
O percurso mostra original275, actual295 e diferença20, depois as quatro linhas, fotografias, revisões e fundamentos do grupo. A decisão é conjunta e distinta do preparador. A aplicação conjunta só aparece após aprovação das duas partes. Diário e interface de custos ocultam as acções individuais das partes; o backend mantém a recusa mesmo com pedido manual. Grupos de outras fontes são filtrados no servidor antes da paginação/contagem. Reviews/resultados/actualidade dos grupos visíveis são lidos em conjunto, sem pesquisa individual de todo o histórico por grupo.
Foram reutilizados os três direitos `general_ledger.correct_prepare/correct_validate/correct_post`, apenas nas fixtures novas: preparador prepara/aplica; validador revê. Com os anteriores são **dez direitos contabilísticos distintos / doze concessões contabilísticas por fixture padrão**. Não há direitos públicos/reais novos ou supervisão técnica implícita. A fixture de coexistência acrescenta apenas os direitos QA de fornecedor já existentes para o seu teste.
`SGF_COST_CORRECTION_QA` fica **false sem configuração**. Requer a opção sintética de custos já protegida, `testing`/`browser-testing`, destino efectivo exacto55439/cluster/base/role próprios e marcador de schema. O flag nas settings da nova fixture não altera configurações do destino. A demonstração8054 mantém flag false, schema ausente e os nove grants contabilísticos originais; a tentativa de usar a nova origem nesse modo é recusada. O SGC autónomo continua sem exigir oficina, provado também pela regressão do seu ciclo de fornecedores. Os artefactos financeiros congelados de25 e30 ficheiros não foram substituídos.
## Provas
[Manifesto e hashes](proofs/common-ledger-direct-cost-correction-20261103.json). Bases exclusivas para regressão, concorrência, coexistência e demonstração; nenhuma prova destrutiva usa a base da equipa.
| Evidência | Resultado |
|---|---|
| Workflow efectivo |275 original e295 sucessor pelos workflows; um par aplicado, relatórios845/295 e fecho QA revisto; originais/fontes/outbox/direitos exactos |
| Serviço e integridade SQL |7 cenários /30 verificações: impactos assimétricos, recusa de partes isoladas, seis fronteiras de falha, SQL contra órfão, versões, pessoa/direitos, período fechado e ausência de cadeia implícita |
| Segurança de contexto |8 verificações: tenant/empresa/unidade estrangeiros mas elegíveis e quatro direitos correntes revogados; probes com rollback |
| Pós-verificação das interfaces |Captura superada continua visível no histórico; páginas de custo, diário genérico e ciclo legado ocultam aplicação isolada, mesmo para partes antigas revistas mas não aplicadas; só leitura |
| HTTP real |58 verificações: CSRF419, contexto antigo/errado, recusas403/409/422, quatro linhas, revisão/aplicação conjunta, proibição de partes, repetição e relatórios/fecho |
| Concorrência |6 processos reais: leitor antes da libertação, grupo desactualizado409 após commit de versão, um par e um fecho após nova conferência |
| Coexistência com fornecedor |Dois domínios de correcção no mesmo schema/livro; seis lançamentos/doze linhas, bruto1025 por lado, grupos/filtros separados e fecho conjunto |
| SGC autónomo |23 verificações actuais do ciclo original de fornecedor, com rollback, no núcleo generalizado |
| Modo275 anterior |Fonte actual exactamente igual à fotografia lançada; pacote do único adaptador de período preservado; flag/schema novos ausentes, nove grants e recusa403 |
| Demonstração nova e formulários |23 verificações, incluindo5 em VM do JavaScript renderizado; sem comandos de negócio, um original275 e nenhum grupo/fecho inicial |
| Demonstração8054 |Fingerprint exacto de fontes/outbox/direitos, flag desligado e schema novo ausente; só leitura |
As seis falhas injectadas foram `after_header`, `after_lines`, `after_event`, `after_correction_first`, `after_correction_result` e `after_receipt`. A tentativa de finalizar uma parte pelo writer interno, em probe adversarial, foi recusada pela constraint diferida `GL_COST_CORRECTION_PAIR_REQUIRED`; o rollback restaurou o livro. A aplicação recuperada criou só um resultado completo.
Na concorrência, o titular reteve o bloqueio de empresa e confirmou taxa/cálculo de versão3, **mantendo295**. O leitor terminou antes da libertação vendo apenas o original275 e nenhuma correcção aplicada. O aplicador que aguardava recusou409 após o commit. Nova captura/revisão gerou outro grupo imutável; dois aplicadores recuperaram o mesmo resultado e dois fechos a mesma versão2. São **dois grupos preparados e um aplicado**, não duplicação de aplicação. Foram observadas cadeias até ao titular e esperas `transactionid`/`tuple`. Original275, cálculos1/2 e registos anteriores da outbox permaneceram iguais; os novos registos de versão3 são os sucessores explícitos do ensaio, todos ainda `captured_no_accounting`.
Na coexistência, ordem de custo e obrigação de fornecedor partilharam o mesmo ID inteiro. O custo conserva três lançamentos/nove eventos e bruto845; o fornecedor, após a sua correcção técnica já autorizada60/60, conserva três lançamentos/nove eventos e bruto180. O foco da ordem devolve apenas um grupo de custos. Custo actual295, outbox e saldo financeiro de fornecedor60 ficaram intactos. A origem do fornecedor é recepção sintética controlada, **não importação viva SGF**. Esta prova também exercita a validação SQL antiga e a nova no mesmo livro.
Provas válidas anteriores são reutilizadas e conferidas por hash. Não foram repetidas suites de stock, fiscalidade ou demais módulos. Sintaxe PHP/JavaScript e `git diff --check` dos dois repositórios constam do manifesto. SGF não tem PHPStan/Pint instalados; código nativo de aplicação não mudou e a qualidade estática anterior não foi repetida. Não se acrescentaram dependências. Os formulários foram exercitados em VM/DOM/rede simulados e por HTTP; isso não constitui execução num navegador nem revisão visual.
## Demonstração e limites
**http://127.0.0.1:8055/qa/cost-demo**. Base/sessão/cookie/assets próprios, só loopback. Começa com original275 realmente lançado e custo sucessor295 validado, **sem grupo de correcção ou fecho inicial**. Preparar o par, rever noutra função, aplicar e consultar diário/balancete/razão; depois conferir e fechar QA. Não reiniciar o exemplo da equipa nem as demonstrações anteriores.
Mantêm-se pendentes e separados: revisão visual, carga sustentada e capacidade de implantação; contas/políticas reais e composição operacional integral dos seis módulos. Não houve novos ensaios de1.000/5.000/10.000, índices ou declaração de capacidade a partir destes casos.
Sem cadeias adicionais de revalorização por arrasto, correcção em período fechado/reabertura, stock valorizado/contabilizado, salários/CIF, operações fiscais/monetárias reais, concessões/migrações no destino, activação de Compras, publicação, push, aceitação ou checkpoint. Os seis registos, cache bloqueada, dados/acessos reais, checkpoints, provas e trabalho alheio foram preservados.
@@ -0,0 +1,19 @@
# Próxima ligação — correcção explícita de custo directo já lançado
03/11/2026. **Autorização expressa recebida: «Autorizar a correcção sintética proposta». Implementação/provas concluídas; ver [entrega e limites](GENERAL_LEDGER_DIRECT_COST_CORRECTION_DELIVERY.md).** O texto seguinte conserva o recorte apresentado. A decisão pedida no final é histórica; não constitui aceitação, reabertura ou autorização operacional.
## Recorte proposto
1. Novas bases/roles QA55439 de regressão e demonstração; preservar8054 e todas as instalações anteriores. Executar os workflows efectivos de oficina/custos e o writer aprovado para o original275. Depois criar/validar explicitamente taxa material sucessora60MZN/UN, mantendo2UN e trabalho175: novo cálculo seleccionado **295MZN**. Nenhuma taxa, origem ou decisão anterior é editada; a alteração de20 é hipótese sintética, sem política real.
2. Uma correcção técnica explícita do lançamento original, capturada e revista por outra identidade/pessoa, usando o núcleo comum e uma transacção única: **estorno D QA-COMPENSACAO-ENSAIO275 / C QA-CUSTO-DIRECTO275**, e **substituição D QA-CUSTO-DIRECTO295 / C QA-COMPENSACAO-ENSAIO295**. Um grupo indivisível, sem expor aplicação individual das partes. Não é outra dívida, consumo, salário ou reconhecimento independente da mesma ordem.
3. Preservar lançamento original, duas composições/decisões/taxas e fotografias. Identidade do grupo por original, unicidade e idempotência com mesma/outra chave; uma correcção por original neste recorte. Mudança de fonte/regra/período/pessoa/âmbito antes de aplicar exige nova conferência; uma sucessora adicional não altera silenciosamente o grupo revisto. Sem cadeias adicionais de revalorização por arrasto.
4. Tipos de origem de correcção de custo distintos dos de fornecedores, mantendo `cost_order_id` e o vínculo ao grupo/original. IDs inteiros coincidentes entre ordens e obrigações não podem misturar filtros/eventos/totais. A conferência do período reconhece a resolução explícita original→par e compara a substituição com o cálculo actual295; fonte alterada sem correcção concluída continua a bloquear.
5. Mostrar antes da confirmação o original275, novo295, diferença20 e as quatro linhas do par. Depois ligar ordem/custos → decisões → grupo/original/estorno/substituição → diário/balancete/razão e fecho QA revisto. Resultado esperado: três lançamentos/seis linhas, montantes brutos845MZN por lado e saldo de custo295. A outbox técnica original não se torna executor contabilístico.
6. Reutilizar `general_ledger.correct_prepare/correct_validate/correct_post` já existentes, apenas nas fixtures novas (preparador prepara/aplica; validador revê), mais direitos actuais de consulta/custo/período. Sem direitos públicos/reais novos, supervisão técnica implícita ou alteração de contas reais. O SGC continua sem exigir oficina; preservar as correcções de fornecedor e as provas válidas.
7. Provar original/substituição exactos, isolamento, direitos/pessoas, revisões desactualizadas, falha entre as partes com rollback integral, recuperação/repetição e concorrência sem duplicar o grupo/fecho. Só testes afectados e bases próprias, sem consumir os dados da demonstração. Revisão visual, carga sustentada e capacidade de implantação permanecem separadas.
## Exclusões preservadas
Sem reabertura ou correcção em período fechado, valorizações/lançamentos de stock, salários/CIF/lote industrial, novos pagamentos/recebimentos, emissão/contas/políticas reais, concessão/migração no destino, activação de Compras, publicação, aceitação ou checkpoint. A nova demonstração pode começar com original275 e fonte sucessora295, preparados pelos workflows, para a equipa decidir a correcção; não reaplica operações de8054.
**Decisão pedida:** autorizar este ciclo sintético agrupado de correcção275→295, com par imutável, direitos de correcção só QA e conferência/relatórios pelo mesmo núcleo.
@@ -0,0 +1,76 @@
# Oficina → custo directo validado → Contabilidade
03/11/2026. `COMMON-LEDGER-DIRECT-COST-SIM-v1` implementado localmente após «Autorizar o ciclo sintético proposto», no [recorte aprovado](GENERAL_LEDGER_DIRECT_COST_SCOPE.md). Código, interface, provas e demonstração própria. Não declara aceitação, checkpoint ou conclusão operacional de toda a aplicação.
## Percurso funcional
As fixtures novas executam os workflows existentes de oficina, autorização, apontamento, verificação técnica, taxas e cálculo. Não inserem uma aprovação de custo por SQL. O caso seleccionado usa material da empresa **2UN×50=100 MZN** e trabalho efectivo **105MIN÷60×100=175 MZN**. A composição efectivamente validada é **275 MZN de custo directo conhecido do perímetro seleccionado**, sem afirmar custo completo, margem, valorização de inventário ou salário.
`DirectCosts::conference` reutiliza a validação de actualidade e a composição exacta do serviço proprietário, numa leitura sem bloqueio de escrita. O adaptador `CostLedgerSource` exige consulta da oficina e dos custos; junta a ordem, cálculo/decisão, origens/decisões técnicas e taxas/decisões seleccionadas. Não chama o writer técnico/financeiro nem processa a outbox.
O mesmo `PayableJournal` captura, revê e aplica duas linhas: **D `QA-CUSTO-DIRECTO`275 / C `QA-COMPENSACAO-ENSAIO`275**, MZN, regra/período QA explícitos. São contas artificiais para provar a ligação técnica, sem política real de capitalização/PGC. A aplicação não cria dívida, consumo, tempo, preço, movimento de stock ou folha salarial. O percurso comprovado termina com **um lançamento, duas linhas, balancete/razão reconciliados e um fecho QA revisto distintamente**.
A interface liga perímetro, conferência actual, fontes e versões → impacto/proposta → revisão → aplicação → diário/balancete/razão → conferência e fecho do período. O razão e o diário voltam à ordem de custo, distinguindo-a de uma obrigação financeira. Listas e histórico têm janelas de25; uma selecção fora da primeira página continua acessível por ID autorizado. Não se muda o contexto automaticamente para validar ou lançar. As chaves dos formulários mantêm-se nas repetições idênticas e mudam com o conteúdo; IDs são números e hashes de versão permanecem cadeias exactas.
## Actualidade, identidade e limitações deliberadas
`gl_cost_sources` declara explicitamente a ordem, os dois identificadores lógicos de origem e o período composto. O instalador só aceita um livro SGF QA novo e vazio. O mapeamento é append-only e um trigger confere o âmbito contra a ordem. Não há associação automática de ordens antigas ou dos seis registos protegidos.
A identidade do efeito usa **âmbito + tipo + ordem/perímetro**, não o ID da nova versão do cálculo. A nova versão muda a fotografia/revisão, mas não autoriza outro reconhecimento do mesmo custo. Fonte, direitos, pessoa, regra, contas, período, origens e versões são revalidados sob a serialização da empresa antes da primeira aplicação. A revisão contabilística exige outra identidade/pessoa; não concede verificação técnica. A confirmação de repetição revalida a autoridade antes de recuperar o resultado existente.
Os **175 MZN conhecidos com taxa material ausente** continuam visíveis como incompletos e são recusados como total contabilizável. Uma composição efectiva de **100,0175 MZN** também é recusada: não há arredondamento inventado para cêntimos. Origem sucessora sem verificação não herda a anterior; torna o cálculo/fonte pendente. Aritmética monetária é exacta; apresentação usa divisão inteira e resto.
O fecho inclui as fontes de custo explicitamente compostas no seu período. Custo incompleto, não lançado, alterado ou com lançamento desactualizado impede o fecho. Fotografias, versões, decisões e impactos entram no hash de conferência. Mudar o custo **depois** de o lançar não gera outro lançamento, estorno ou correcção automática: a correcção de custo já lançado está expressamente fora desta autorização. Não existe reabertura.
Os adaptadores adicionais conservam a resposta/hash anterior quando existe apenas a fonte Sales: a nova composição de custos não envolve silenciosamente o pacote de conferência de vendas noutro hash. Os filtros de custo usam `cost_order_id`, separados de `sales_invoice_id` e do `obligation_id` de fornecedores. O SGC autónomo continua sem exigir oficina e recusa a origem de custo não composta. Os artefactos autónomos anteriores de25 e30 ficheiros não foram substituídos.
Uma prova adicional compôs **custo275 + fornecedor60 no mesmo livro**, usando uma recepção sintética controlada de fornecedor do recorte já autorizado, sem importação viva. A ordem e a obrigação financeira tiveram o mesmo ID inteiro: os filtros conservaram um lançamento/três eventos de cada tipo, sem misturar os montantes. O resultado conjunto foi dois lançamentos/quatro linhas,335MZN por lado e um fecho QA. Custo/outbox ficaram iguais e a posição de fornecedor permaneceu60; não se criou pagamento ou stock. A guarda de obrigações admite também esta composição Cost-QA, com a mesma validação efectiva de base/role/cluster; direitos de consulta/decisão de fornecedor foram acrescentados apenas nessa fixture de integração. Isto não demonstra a composição completa de Compras ou todos os seis módulos.
## Guardas e direitos
`SGF_COST_LEDGER_QA` fica **false sem configuração**. A extensão da guarda aceita apenas `testing`/`browser-testing` com opção explícita, PG loopback55439, cluster esperado, base `payable_sgf_<12hex>` e role não elevada `payable_history_sgf_<mesmo id>`, sem redireccionamento de ligação e com destino efectivo conferido. As regras anteriores de `sgf_tempo_test` ficam preservadas; não se utilizou essa base para estes testes.
Só as bases novas recebem as funções SQL `sgf_wo_environment`/`sgf_dc_environment` vinculadas ao seu próprio nome/role/cluster. Os ficheiros SQL/migrações originais e os destinos existentes não foram alterados por esta instalação. O arranque não instala `CostSchema`, não migra nem concede acessos.
| Perfil sintético | Direitos reutilizados |
|---|---|
| Preparação | workshop.view; direct_costs.view/prepare; general_ledger.view/prepare/post/period_prepare/period_close |
| Validação | workshop.view; direct_costs.view/validate; general_ledger.view/validate/period_validate |
| Consulta | workshop.view; direct_costs.view; general_ledger.view |
| Técnico / verificador | Direitos técnicos existentes, separados; sem Contabilidade implícita |
São **sete direitos contabilísticos distintos / nove concessões contabilísticas**, apenas nas novas fixtures. Direitos de contexto empresa/unidade são explícitos. Cinco actores sintéticos declarados; o utilizador auxiliar do construtor fica sem grants. Não há nomes de pessoas reais no código funcional ou novos direitos públicos/reais.
## Provas
[Manifesto e hashes](proofs/common-ledger-direct-cost-20261103.json). Bases de prova e demonstração da equipa são distintas.
| Prova | Resultado |
|---|---|
| Percurso efectivo completo |275 validado pelos workflows → um lançamento/duas linhas → relatórios → fecho QA; repetição com a mesma e outra chave sem duplicação |
| Regressão de custos |9 cenários /27 verificações, com rollback: parcial175, valor sem cêntimo exacto, versões/direitos/pessoa, quatro fronteiras de falha e identidade estável |
| HTTP real |51 verificações: CSRF419, recusas403/409/422, contextos, proposta/impacto, revisão, repetição, diário/razão e fecho |
| Isolamento e verificação técnica |10 verificações: contextos estrangeiros elegíveis de tenant/empresa/unidade, três direitos revogados e sucessor técnico efectivamente criado pelo workflow mas não verificado; tudo revertido |
| Concorrência |6 processos reais; detalhes abaixo |
| Compatibilidade de fornecedores |8 cenários /74 asserções do writer numa base nova; provas anteriores preservadas |
| Coexistência custo + fornecedor |IDs coincidentes, filtros/eventos separados,275+60=335MZN no mesmo writer e fecho conjunto; custo/outbox e saldo financeiro preservados |
| Compatibilidade Sales |Fonte actual comparada exactamente à fotografia comercial lançada; resultado/hash da conferência de período apenas com Sales igual ao anterior; balancete existente continua2400MZN por lado; só leitura |
| SGC autónomo |Recusa explícita do custo sem origem composta, sem schema de oficina exigido ou proposta criada |
| Demonstração e formulários |22 verificações HTTP/VM, incluindo4 dos formulários renderizados; zero comandos de negócio; prova privada de preservação da fixture |
| Pós-verificação de apresentação |Diário identifica ordem de custo, filtro retém1lançamento/3eventos, razão conserva origem e links; só leitura |
Na concorrência, a transacção titular reteve o bloqueio da empresa e preparou/aprovou uma **taxa sucessora com o mesmo valor50**, mas versão2. Um leitor terminou antes da libertação, vendo o estado confirmado de275 e nenhum lançamento. O aplicador aguardou no bloqueio real; após o commit da nova versão respondeu **409**. O valor igual não dispensou nova conferência. O ensaio criou e validou cálculo2 e nova captura/revisão contabilística. Dois aplicadores concorrentes recuperaram **o mesmo lançamento**, e dois fechos concorrentes recuperaram **o mesmo fecho/versão2**. Foram observadas as cadeias de bloqueio até ao titular e esperas `transactionid`/`tuple`. Originais técnicos, cálculo1 e registos anteriores da outbox ficaram iguais; os novos registos de custo são os sucessores explícitos do ensaio, todos ainda `captured_no_accounting`.
As quatro falhas injectadas (`after_header`, `after_lines`, `after_event`, `after_receipt`) desfizeram lançamento, linhas, histórico e recibo da tentativa; a repetição posterior concluiu sem duplicação. Os fingerprints antes/depois do percurso integral e HTTP conferem ordens, entradas/verificações, comandos de oficina, taxas/cálculos/decisões/comandos/eventos/outbox de custos, direitos e autoridade de obrigações. O mapeamento também tem prova específica de imutabilidade.
Tentativas de preparação dos helpers que falharam antes de comandos de negócio — chave de ordenação da outbox e import de uma classe no harness — foram corrigidas e preservadas como diagnóstico, sem reset; não são contadas como provas aprovadas. O primeiro probe da demonstração omitiu a geração de contexto e recebeu409; o cliente de teste passou a enviar o token, sem alterar guardas da aplicação. Uma correcção posterior dos rótulos do diário teve pós-verificação só de leitura.
Os formulários usam VM/DOM e rede simulados sobre o JavaScript efectivamente renderizado; isso não é execução num navegador. Sintaxe PHP/JavaScript e `git diff --check` constam do manifesto. Não se acrescentaram dependências. SGF não tem PHPStan/Pint instalados; não se declara execução dessas ferramentas. A análise estática nativa válida anterior é reutilizada no seu âmbito, sem repetir ficheiros nativos de aplicação que não mudaram.
## Demonstração e pendências
**http://127.0.0.1:8054/qa/cost-demo**, base/sessão/cookie/assets privados próprios, só loopback. Parte de oficina, taxas e custo275 realmente validados; **sem proposta contabilística, lançamento ou fecho iniciais**, para decisões individuais da equipa. Não reiniciar ou consumir este exemplo em testes destrutivos. Os perfis de Contabilidade consultam evidência técnica, sem adquirir poderes de técnico/verificador.
Continuam separados: revisão visual, carga sustentada e capacidade de implantação; contas/políticas reais e composição operacional completa entre módulos. Não se mediram novos volumes1.000/5.000/10.000, criaram índices ou validou capacidade a partir deste cenário. As demonstrações existentes continuam independentes; esta entrega não prova uma única instalação operacional com todos os seis módulos.
Sem valorização/lançamentos de stock, salários/CIF/lote industrial, preço de venda derivado do custo, operação fiscal/monetária real, correcção de custo já lançado, reabertura, migração/concessão no destino, activação de Compras, publicação, push, aceitação ou checkpoint. Seis registos, cache bloqueada, provas/checkpoints anteriores e trabalho alheio preservados.
+20
View File
@@ -0,0 +1,20 @@
# Próxima ligação proposta — custo directo de oficina e diário QA
03/11/2026. **Autorização expressa recebida: «Autorizar o ciclo sintético proposto». Implementação/provas concluídas no recorte sintético; ver [entrega e limites](GENERAL_LEDGER_DIRECT_COST_DELIVERY.md).** O texto seguinte conserva o recorte apresentado; a decisão pedida no final é histórica. Não equivale a aceitação ou autorização de correcção de custo já lançado.
## Recorte a autorizar
1. Nova composição de regressão e outra de demonstração SGF no cluster55439, com bases/roles não elevadas próprias e identidades sintéticas distintas. Não usar/resetar `sgf_tempo_test`, as demonstrações ou os seis registos. As guardas PHP/SQL de oficinas/custo serão estendidas só à nova fixture efectiva, sem retirar o bloqueio real ou alterar migrações no destino.
2. Reutilizar efectivamente os workflows de oficina, verificação e custo directo, sem fabricar uma aprovação por SQL: material da empresa2UN×50MZN/UN =100; trabalho105MIN÷60×100MZN/H =175; **275MZN de custo directo conhecido no perímetro seleccionado**. Taxas escolhidas e validadas por ID/versão; validação do cálculo por identidade distinta. Não é custo completo, margem, inventário valorizado ou salário real.
3. Capturar uma proposta contabilística do cálculo validado, com ordem, perímetro, origens técnicas, taxas, versões, decisão e hash. Um lançamento sintético de duas linhas no writer comum: **D `QA-CUSTO-DIRECTO`275 / C `QA-COMPENSACAO-ENSAIO`275**, MZN, período QA explícito. São contas artificiais de um ensaio de ligação técnica; não representam política real de capitalização, contrapartida de stock/folha salarial ou enquadramento PGC aprovado. Não duplicar dívida, consumo físico, tempo, preço comercial ou lançamento de factura de fornecedor.
4. Conferência contabilística distinta e fundamento antes de aplicar. Revalidar direitos, contexto, pessoa, fonte, origens/taxas, versão do cálculo/regra/período e impacto sob o mesmo bloqueio de empresa. Uma identidade de efeito estável por ordem/perímetro impede contabilizar novamente a mesma composição apenas porque foi criada outra versão de cálculo. Alteração antes de aplicar exige nova conferência; depois de aplicado não permite outro reconhecimento directo ou correcção silenciosa. Correcção/revalorização de custos já lançados permanece fora deste recorte.
5. Cálculo incompleto de175 conhecidos, taxa ausente, origem não verificada, total racional não representável em cêntimos ou versão desactualizada ficam visíveis e recusam o lançamento. Não arredondar, inventar taxa/total ou tratar pendência como zero. O fecho QA confere também esta origem explicitamente composta e recusa pendências/mudanças; sem reabrir período.
6. Ligar oficina/custo/decisões → proposta/impacto → diário → balancete/razão e fecho QA. Nenhuma contabilização por arrasto da validação de custo ou outbox: preparar, rever e aplicar são decisões explícitas. A outbox original mantém o seu estado histórico; não se transforma retroactivamente em executor.
7. Reutilizar direitos `workshop.view`, `direct_costs.view/prepare/validate` e `general_ledger.view/prepare/validate/post/period_*` existentes, distribuídos só em novas fixtures. Sem direitos públicos/reais novos, herança de administração, técnico/verificador real ou novas dependências. O SGC autónomo continua sem exigir oficina e recusa a origem não composta.
8. Provar o percurso275, recusas de175 incompletos/versões/âmbito/direitos, concorrência, falhas/repetição sem duplicação e preservação de origens. Executar apenas regressão afectada do writer/fecho/relatórios, reutilizando as provas válidas. Demonstrar na base própria da equipa sem consumir os seus exemplos nos testes. Revisão visual e capacidade de implantação continuam separadas.
## Exclusões mantidas
Sem valorização/lançamentos de stock, salários/folha salarial, CIF/lote industrial, produção, conta ou política fiscal real, novos pagamentos/recebimentos, emissão real, reabertura, correcção de custos lançados, migração/concessão no destino, activação de Compras, publicação, aceitação ou checkpoint. A autorização proposta só retira a exclusão de **desenvolver e provar este custo directo seleccionado275 no diário sintético**, mantendo as restantes fronteiras.
**Decisão pedida:** autorizar este ciclo sintético agrupado, incluindo a nova origem de custo directo e os dois tipos de conta artificiais acima, com direitos só QA e o mesmo writer, sem utilização real.
@@ -0,0 +1,43 @@
# Primeiro lançamento sintético — proposta concreta para autorização
**Autorização recebida em02/11/2026:** o utilizador respondeu «Autorizar o incremento sintético proposto». O recorte abaixo foi autorizado e implementado localmente; estado/provas em [GENERAL_LEDGER_DELIVERY.md](GENERAL_LEDGER_DELIVERY.md). A descrição de proposta/decisão pendente abaixo preserva a preparação histórica e não indica falta de autorização actual. Não constitui aceitação funcional, activação real ou autorização de checkpoint.
`COMMON-LEDGER-PAYABLE-SIM-v1` — proposta de 02/11/2026. **Apenas especificação; motor, schema, direitos e lançamentos desta proposta não implementados ou concedidos.** A entrega funcional feita nesta passagem é o relatório financeiro, descrito em [SGF_PAYABLE_REPORT_DELIVERY.md](SGF_PAYABLE_REPORT_DELIVERY.md).
## Limite que exige decisão
O [AGENTS.md](../AGENTS.md) regista: «O recorte actual permanece só obrigação a fornecedor; sem pagamentos/cobranças/lançamentos por arrasto.» Regista também o desenvolvimento dos módulos em falta com identidades e bases sintéticas, sem confirmações técnicas de cada pequeno passo. Esta proposta agrupa **um incremento funcional contabilístico novo**, para autorização expressa antes de criar o primeiro motor/escritor e seus direitos. Não é um pedido para repetir aceitações ou aplicar acessos reais.
A classificação existente do catálogo é de vendas, sem lançamentos. Não fornece automaticamente a contrapartida de uma factura de fornecedor. O relatório financeiro novo também não é uma origem contabilística nem uma autorização de reconhecimento: a origem proposta é o efeito imutável reconhecido no núcleo Payables, conferido novamente.
## Recorte proposto para aprovar integralmente
1. Um núcleo único em `packages/general-ledger`, primeiro adaptador SGF, desligado por defeito e limitado a uma base/role QA nova no cluster 55439. Composição autónoma nativa futura separada; não copiar um segundo motor, activar pacotes instalados ou exigir SGF remoto ao SGC.
2. Um efeito: **obrigação de fornecedor reconhecida → um lançamento sintético equilibrado**. Fonte por âmbito, identidade factual, ID do reconhecimento e revisão exacta, não por coincidência de IDs ou leitura do estado de uma factura. Não voltar a reconhecer o principal por chegada da factura ou posterior pagamento.
3. Cenário novo e explícito: principal 60,00 MZN, imposto documental 0, sem pagamentos nessa fixture inicial. Isto delimita o cenário e não cria uma pré-condição universal de dívida só ser reconhecida antes de pagamentos. Usa-se o principal reconhecido, nunca o saldo residual como principal do lançamento.
4. Regra imutável de ensaio `QA-PAYABLE-JOURNAL-v1`: **débito 60,00 em `QA-CONTRAPARTIDA` / crédito 60,00 em `QA-FORNECEDOR`**. Ambas contas de movimento artificiais. Não são contas PGC aprovadas, despesa/inventário/IVA inferidos, parametrização da Tempo ou classificação comercial reutilizada indevidamente.
5. Data explícita de lançamento 29/10/2026 e período artificial `QA-2026-10`, aberto de 01/10 a 31/10/2026. Data e período são hipóteses do ensaio, separados de vencimento, data de pagamento e enquadramento fiscal real. Sem fecho/reabertura operacional ou escolha automática da data do computador.
6. Preparador sintético propõe fonte, data, regra/versionamento e fundamento; validador sintético distinto revê a fotografia exacta; preparador aplica apenas a versão revista. Não há validação técnica/fiscal implícita, privilégio associado a nomes ou revisão pelo próprio autor. Mudança de fonte/regra/período desde a prévia exige nova conferência.
7. Aplicação numa transacção: revalidação de permissões/contexto, fonte/revisão, decisão independente, regra, período aberto/versionado, moeda e igualdade exacta de débitos/créditos; gravação de cabeçalho/linhas, recibo de repetição e auditoria append-only. Fundamento, autor/data e referências preservados. Montantes inteiros em unidades menores, sem arredondamento novo.
8. Unicidade por empresa/unidade, identidade factual do reconhecimento e tipo de efeito. Mudança de versão ou chave de pedido não autoriza segundo lançamento do mesmo efeito. Mesma chave/conteúdo recupera o recibo; conteúdo diferente recusa. A autorização actual é conferida antes de recuperar um resultado. Um lançamento já gravado permanece histórico mesmo se o período fechar depois; replay não cria nova gravação.
9. Consulta do lançamento e extracto/total apenas desse período/duas contas sintéticas, reconciliados com os próprios movimentos e a origem. Não declarar contabilidade geral, balancete legal, fiscalidade, reconhecimento de vendas, valorização de stock, pagamentos ou fecho completos.
## Direitos apresentados antes de qualquer concessão
Proposta de novos direitos **apenas para identidades da fixture QA**: `general_ledger.view`, `general_ledger.prepare`, `general_ledger.validate`, `general_ledger.post`. Não há herança de Administração, Compras, Financeiro, classificação ou nomes.
| Função sintética | Direitos propostos |
|---|---|
| Preparador/aplicador | view, prepare, post |
| Validador distinto | view, validate |
| Consulta | view |
Nenhuma concessão real, direito público ou competência para gerir estes direitos é incluída. A autorização do incremento autoriza construir e conceder estes direitos **na fixture isolada**, não na Tempo, nas demos existentes ou em dados comerciais.
## Provas previstas e exclusões
Testar fonte inexistente/incompatível, tenant/empresa/unidade indevidos, direitos revogados, actor/pessoa trocados, auto-revisão, regra/data/período/versão alterados, débitos/créditos incompatíveis, moeda, concorrência da mesma origem, repetição por mesma/outra chave, falha entre cabeçalho/linhas/recibo/auditoria e recuperação sem duplicação. Conferir montantes/origens/stock/orçamento/Payables antes/depois, fora dos novos registos de lançamento de ensaio. Não executar de novo suites válidas alheias.
A proposta não autoriza correcção de lançamento já aplicado, estorno, reabertura de período, reconciliação bancária, efeito de pagamento/recebimento, contas/impostos reais, importação histórica automática, emissão, instalação de migração no destino, publicação, aceitação ou checkpoint. Eventual correcção exige circuito append-only próprio posterior; os originais não serão editados/apagados por um percurso provisório.
Seis registos protegidos, cache bloqueada, demos, direitos/dados reais e trabalho em curso permanecem intactos. Revisão visual e capacidade de implantação continuam separadas. **Decisão pendente:** autorizar este recorte sintético, com estes quatro direitos exclusivamente QA, antes da implementação contabilística.
@@ -0,0 +1,57 @@
# Correcção industrial1800→1820 — entrega local sintética
03/11/2026. `COMMON-LEDGER-INDUSTRIAL-CORRECTION-SIM-v1`. Autorização expressa: **«Autorizar a correcção industrial sintética proposta»**. Implementado e testado o recorte aprovado, com o mesmo escritor contabilístico. Proposta original arquivada por hash antes de actualizar o seu estado; sem aceitação ou checkpoint presumidos.
**Demonstração nova: http://127.0.0.1:8059/qa/cost-demo.** Bases/roles próprias no cluster QA55439;8058 e anteriores preservadas. A demo começa com os originais directo275 e industrial1800 lançados, sucessores295 e1820 efectivamente validados e nenhum grupo correctivo ou fecho aplicado. As decisões da demonstração continuam individuais.
## Percurso implementado
Os workflows industriais existentes criam/validam a taxa material sucessora51MZN/KG, mantendo20KG, trabalho500, conjunto/critério CIF e produção10UN. Resultado sucessor1020+500+300=1820,182/UN; **residual300 separado, sem lançamento**. Entradas, taxa anterior50, critério, resultados1800/1820, decisões e original contabilístico permanecem imutáveis.
O preparador captura original1800, nova origem1820, diferença20, contas/período e quatro linhas; outro utilizador/pessoa confere essa versão exacta. O mesmo serviço aplica numa transacção:
| Parte | Débito | Crédito | Montante MZN |
|---|---|---|---:|
| Estorno | QA-COMPENSACAO-INDUSTRIAL | QA-CUSTO-INDUSTRIAL |1800|
| Substituição | QA-CUSTO-INDUSTRIAL | QA-COMPENSACAO-INDUSTRIAL |1820|
Os tipos `industry.cost.reversal/replacement` conservam lote, original, origem estável, versões e vínculo ao grupo. Não podem ser pedidos no `effect-prepare` público nem revistos/aplicados individualmente. O núcleo reutiliza capturas, revisão, escrita, eventos, comprovativos de repetição e autorizações existentes; não há segundo motor ou execução da outbox.
`IndustrialCorrectionSchema` instala apenas em livro SGF novo vazio. A guarda SQL diferida exige o resultado do grupo e as duas partes coerentes com original, âmbito, período, contas e montantes. Uma parte isolada equilibrada é recusada no commit. A delegação reconhece apenas o domínio industrial; mantém as validações SQL próprias de fornecedor e custo directo.
A confirmação revalida identidade/pessoa, direito, contexto, revisão, fonte industrial, resultado/taxas/critério, regra e período sob o bloqueio de empresa existente. Versão alterada, mesmo continuando1820, exige nova conferência. A substituição aplicada resolve a diferença com o original para a conferência do período. Uma alteração posterior torna a fonte pendente; não gera outra correcção ou reconhecimento automaticamente. Uma correcção por original neste recorte, sem cadeia adicional ou reabertura.
## Integração e consulta
Página industrial mostra origem actual, diferença, fotografias das quatro linhas, decisões e autores, grupo, original, estorno e substituição. Grupos usam o mesmo ID/versão de comando, fundamentos obrigatórios e repetição estável para conteúdo igual. Captura superada permanece visível sem acção. As interfaces industrial, diário genérico e ciclo comum não expõem aplicação isolada das partes.
Filtros de lote, ordem e obrigação continuam tipados e aplicados antes de paginar. A janela de grupos industrial filtra o original industrial antes da paginação; não mistura o grupo directo com ID factual igual. O razão liga ao lote, e o fecho conjunto confere todas as origens, não só a página visível. Apenas direitos `correct_prepare/validate/post` existentes, mais direitos de origem/consulta/período já aprovados, nas fixtures novas. Não se concedeu direito real/público ou por nome/email.
## Resultados e provas
Manifesto verificável: [common-ledger-industrial-correction-20261103.json](proofs/common-ledger-industrial-correction-20261103.json).
| Prova dirigida | Resultado |
|---|---|
| Regressão `a3c69acf5a50` |7 casos/31 checks em rollback: impacto assimétrico, partes públicas recusadas,6 fronteiras de falha, recuperação, SQL contra parte órfã, versão alterada, direitos/pessoa, flag desligada, período fechado e ausência de cadeia implícita |
| Segurança nessa base |7 checks de contextos e direitos revogados, preservando originais |
| Âmbito aprofundado em `d55f5fc71dcb` |4 checks: tenant/empresa/unidade estrangeiros com pertença, direitos contabilísticos e pessoa financeira efectivamente presentes; original inacessível por âmbito; rollback integral |
| HTTP real nessa base |51 checks: autenticação, CSRF/contexto, fonte/versão, prévia, revisão distinta, recusa de partes, repetição mesma/outra chave, três lançamentos/seis linhas industriais, nove eventos, razão1820, fonte intacta e fecho recusado enquanto outros domínios estão pendentes |
| Coexistência nessa base |6 checks em rollback: três domínios correctivos — fornecedor, directo e industrial — passam as guardas SQL e mantêm filtros/eventos/totais separados, mesmo com IDs factuais iguais |
| Percurso conjunto nessa base |33 checks: completar venda/recebíveis, fornecedor e correcção directa; revalidar origens/direitos industriais e directos; um fecho e relatórios reconciliados |
| Concorrência `5b49607829f9` |6 processos reais: leitor termina antes da libertação; escritor aguarda lock de empresa observado; após sucessora51/resultado1820 versão3 confirmados, grupo antigo recusa409; dois pedidos do grupo novo recuperam um único par; dois fechos recuperam um único fecho |
| Demo `61b694d72ae4` |23 checks de três perfis/links e formulário renderizado;5 deles em Node VM. Sem comandos de negócio; impressão digital original/outbox/direitos exacta antes/depois |
**155 checks dirigidos**, incluindo5 de formulário simulado, mais a prova concorrente de6 processos. As provas válidas de anteriores incrementos e pacotes congelados são reutilizadas por hash; não se repetiram suites alheias ou benchmarks de carga.
Industrial:3 lançamentos/6 linhas, bruto5420 por lado, saldo1820, residual300 fora do diário. Composição completa: **11 lançamentos/23 linhas, débitos8725=créditos8725MZN e1 fecho**. Mantém cliente400, directo295 e fornecedor financeiro60. Na concorrência ficam dois grupos industriais preparados — um superado e um aplicado — sem duplicar a correcção. A conferência SQL final verifica apenas grupos efectivamente aplicados.
As primeiras tentativas completas de composição encontraram um contador de teste que ainda esperava só um grupo correctivo. O produto já tinha correctamente o grupo industrial e o directo; ajustou-se o auxiliar e conservou-se o estado parcial, sem reset ou prova de sucesso presumida. A prova concorrente completa correu em base nova. O pós-teste SQL inicial tentou validar também o grupo superado não aplicado; foi corrigido para validar resultados aplicados. O HTTP inicial parou numa expectativa do estado antigo `requires_correction`; o estado industrial preservado é `requires_future_correction`. Não se contam estas saídas parciais como provas válidas.
## Preservação e limites
Na8058 continuam flag de correcção desligada e schema novo ausente; fontes, outbox, direitos, contagem inicial do livro e pacote de três fornecedores de conferência mantêm os valores/hash anteriores. Não se actualizaram bases antigas. A nova configuração de correcção é false por omissão. Originais industriais1800/1820 e outbox anteriores permanecem exactos também na prova concorrente; a versão3 é acréscimo sintético explícito para provar recusa de revisão desactualizada.
Seis associações pendentes, cache bloqueada, demos anteriores, configurações/direitos reais e alterações alheias preservados. Credenciais/dados de acesso permanecem privados. Sem stock valorizado, folha salarial, residual contabilizado, pagamentos/recebimentos novos, correcção em período fechado, cadeia adicional, reabertura, instalação no destino, activação de Compras ou publicação.
Revisão visual continua pendente: HTTP e Node VM não são prova de navegador. Carga sustentada/concorrência em volume e capacidade de implantação continuam pendentes separadas. O ensaio local não demonstra aplicação completa ou operação real. Sem experiências de índices ou índices no destino; sem aceitação ou checkpoint de encerramento presumidos.
@@ -0,0 +1,29 @@
# Correcção industrial sintética1800→1820 — proposta para decisão
03/11/2026. `COMMON-LEDGER-INDUSTRIAL-CORRECTION-SIM-v1`. **Autorização expressa recebida: «Autorizar a correcção industrial sintética proposta». Implementado/testado; ver [entrega e limites](GENERAL_LEDGER_INDUSTRIAL_CORRECTION_DELIVERY.md).** Texto aprovado arquivado por hash; a decisão pedida no fim é histórica, não aceitação ou autorização operacional. Preserva a [entrega industrial1800](GENERAL_LEDGER_INDUSTRIAL_DELIVERY.md) e todas as aprovações anteriores.
## Percurso proposto
1. Bases/roles QA novas55439 para regressão e demonstração; não alterar8058 ou outras demos. Reutilizar workflows industriais efectivos e escritor contabilístico comum para resultado original1800 e respectivo lançamento. Preparar taxa material sucessora51MZN/KG, mantendo20KG, trabalho500 e CIF imputado300:1020+500+300=1820,10UN,182/UN. Residual300 separado e não lançado. Taxa e novo resultado revistos por identidade distinta, sem editar o original.
2. Capturar uma correcção explícita do original industrial, com fundamento, origem estável e fotografias/versões exactas. Mostrar original1800, novo1820, diferença20 e quatro linhas antes da decisão: estorno D QA-COMPENSACAO-INDUSTRIAL1800 / C QA-CUSTO-INDUSTRIAL1800; substituição D QA-CUSTO-INDUSTRIAL1820 / C QA-COMPENSACAO-INDUSTRIAL1820. Contas artificiais, sem alteração do residual, quantidades, orçamento, stock ou folha salarial.
3. Uma revisão contabilística distinta e uma aplicação atómica do grupo inteiro no mesmo núcleo. Não expor validação/aplicação individual das partes. Preservar entrada/taxa/critério/resultados, decisões, original contabilístico e outbox. Identidade tipada industrial separada de fornecedor/custo directo; IDs iguais não misturam filtros, eventos ou totais.
4. Uma correcção por original neste recorte. Versão/direito/contexto/pessoa/regra/período/dependências alterados exigem nova conferência. Uma nova versão de resultado não permite reconhecer novamente o mesmo lote. Cadeias adicionais de correcção, correcção em período fechado e reabertura ficam excluídas.
5. Resolver explicitamente a pendência actual `requires_future_correction`: após o par, a conferência de período compara a substituição1820 com a origem vigente; outra alteração continua a impedir o fecho. Diário, balancete e razão ligam original, grupo, estorno e substituição. Só o fecho QA já existente, com nova captura e revisão distinta, sem reabrir períodos.
## Resultado e direitos propostos
Industrial isolado:3 lançamentos/6 linhas; bruto5420MZN por lado; saldo industrial1820; residual300 fora do diário. Na composição dos quatro domínios já aprovados:11 lançamentos/23 linhas; bruto8725 por lado, com os outros saldos preservados. Isto é reconciliação de um cenário artificial, não política contabilística real.
Reutilizar `general_ledger.correct_prepare/correct_validate/correct_post` e os direitos de leitura industrial/diário/período existentes, exclusivamente nas bases QA novas. Preparador prepara/aplica; validador distinto revê; leitor consulta. Nenhum direito novo, concessão real/pública ou privilégio por nome/email. A extensão do escritor e das guardas SQL fica limitada à correcção industrial seleccionada, preservando as regras dos outros domínios.
## Provas e exclusões
Provar originais imutáveis, impacto exacto, recusa de partes isoladas por aplicação e SQL, isolamento, pessoa/direitos actuais, versões alteradas, falhas entre partes com rollback integral, recuperação e repetição sem duplicar, concorrência de aplicação/fecho e coexistência com correcção directa/fornecedor. Reutilizar provas antigas válidas e executar apenas verificações afectadas. Demo inicial sem correcção industrial ou fecho consumidos; sem reset automático.
Preservar seis registos sem associação, cache bloqueada, demos, pacotes congelados, direitos reais e trabalho em curso. Sem pagamentos/recebimentos novos, residual contabilizado, stock valorizado, salários, contas/políticas/operações reais, instalação no destino, activação de Compras, publicação, aceitação ou checkpoint. Revisão visual, carga sustentada e capacidade de implantação permanecem pendentes.
## Motivo da decisão
O [AGENTS.md](../AGENTS.md), na autorização de `COMMON-LEDGER-INDUSTRIAL-SIM-v1`, exclui expressamente **«correcção industrial»**. A continuação técnica permite preparar este recorte, mas não elimina essa exclusão. Pede-se retirar apenas essa exclusão para desenvolver/provar o par sintético1800→1820 descrito acima, conservando os restantes limites.
**Decisão pedida:** autorizar a correcção industrial sintética1800→1820, com revisão distinta, par atómico, direitos existentes só QA e relatórios/fecho pelo mesmo núcleo.
@@ -0,0 +1,62 @@
# Lote industrial → Contabilidade — entrega sintética local
Continuação posterior expressamente autorizada e [entregue em bases novas: correcção1800→1820](GENERAL_LEDGER_INDUSTRIAL_CORRECTION_DELIVERY.md). As exclusões de correcção abaixo descrevem o âmbito original desta entrega e continuam na demo8058; a capacidade nova existe só na8059 e nas suas bases de prova. Manifestos anteriores conservam o estado histórico.
03/11/2026. `COMMON-LEDGER-INDUSTRIAL-SIM-v1`, autorizado expressamente por **«Autorizar o ciclo industrial sintético proposto»**. Recorte aprovado preservado por hash; sem aceitação ou checkpoint presumidos.
**Implementado:** resultado industrial efectivamente preparado/validado pelo módulo proprietário → captura com impacto → revisão contabilística distinta → aplicação única pelo escritor comum → diário/balancete/razão → conferência e fecho QA conjunto. Demonstração inicial separada: **http://127.0.0.1:8058/qa/cost-demo**.
## Origem e impacto
`IndustrialCostFixture` executa os workflows de `IndustrialCosts`, com identidades distintas para preparar e validar entradas, taxas e critério. Calcula-se e valida-se explicitamente o resultado:20KG×50=1000 material;300MIN÷60×100=500 trabalho; conjunto CIF600/capacidade10HM×utilização5HM=300 imputados. Total1800MZN;10UN;180/UN. **Residual300 separado e não lançado.** As aprovações positivas não são fabricadas por SQL.
`IndustrialCosts::conference` confere um lote e o resultado actual, incluindo o produto, entradas/versões, taxas, critério, decisões e validade das dependências, sem carregar a listagem industrial inteira ou obter bloqueio de escrita. `IndustrialLedgerSource` conserva esta evidência na fotografia da origem. Exige resultado vigente completo aprovado distintamente, produção concluída e valor exacto representável em cêntimos; não arredonda ou transforma800 conhecidos sem taxa material num total.
O escritor `PayableJournal` existente aplica **D QA-CUSTO-INDUSTRIAL1800 / C QA-COMPENSACAO-INDUSTRIAL1800**, em duas linhas. Usa a transacção/bloqueio de empresa, autorização actual, revisão exacta, idempotência, histórico e guardas QA existentes. Não há segundo motor, processamento da outbox ou efeito financeiro adicional. A identidade do efeito é estável por lote/perímetro, mesmo se o resultado ganhar outra versão. Um resultado já lançado que muda fica `requires_future_correction`; não se criou correcção industrial por consequência desta entrega.
O período contabilístico tem de conter o período completo do lote. O fecho inclui todas as fontes explicitamente compostas, revalidando permissões e dependências industriais mesmo quando o montante continua1800. Perda de acesso, origem pendente ou versão alterada exige nova conferência.
## Composição e consulta
Nova base/role de demonstração e bases distintas de regressão no cluster55439. O instalador industrial exige livro novo vazio e cria apenas a selecção imutável dos perímetros QA; não migra instalações anteriores. Guardas SQL de custeio industrial são configuradas para a identidade exacta dessas bases novas, preservando os bloqueios no destino. A capacidade `industrial_ledger.synthetic_enabled` fica desligada por omissão.
O painel conjunto passa a incluir lotes industriais apenas quando essa capacidade foi explicitamente composta. Páginas independentes de25; resultados/decisões/lançamentos são lidos em conjuntos por página, sem conferência por cartão. Os cartões distinguem metadados registados de uma conferência actual. Sem `industrial_costs.view`, o painel não revela linhas ou contagens, e não expõe formas de fecho. Origem indisponível falha explicitamente. A página do lote, diário genérico e razão mantêm ID industrial tipado e ligações à evidência; não apresentam lote como dívida de fornecedor.
Reutilizam-se apenas direitos existentes: preparador industrial `.view/prepare`, validador `.view/validate`, leitor `.view`, mais os direitos contabilísticos/contextuais já autorizados. As concessões existem exclusivamente nas fixtures novas. Sem novos direitos públicos/reais ou associação de privilégios a pessoas reais.
O módulo proprietário impede reutilizar `source_ref` entre lotes. A ligação contabilística recusa origens seleccionadas que coincidam com perímetros de custo directo; o adaptador directo também confere a composição industrial quando activada. São origens sintéticas distintas. Isto não constitui um adaptador de stock ou prova de equivalência de referências empresariais legadas.
## Resultados e provas
Manifesto: [common-ledger-industrial-20261103.json](proofs/common-ledger-industrial-20261103.json).
| Prova | Resultado |
|---|---|
| Regressão `1aa5762a0c16` | 8 casos/31 verificações em rollback: exactidão, parcialidade, dependências, direitos/pessoa, contexto elegível de tenant/empresa/unidade diferente, quatro pontos de falha, recuperação, duplicação, sobreposição directa, mapeamento imutável e páginas25+1 |
| Limites adicionais na mesma base | 5 casos/10 verificações em rollback: resultado não aprovado, total racional1800,0000002 sem arredondamento, produção não concluída, critério pendente, origem reutilizada entre lotes, sucessora de resultado já lançado e período incompatível |
| HTTP real | 43 verificações: autenticação, CSRF, contexto/módulo, filtros, impacto, preparador/validador distintos, revisão antiga, repetição, razão/diário tipados e recusa de fecho com outras fontes pendentes |
| JavaScript industrial renderizado | 5 verificações em Node VM: IDs numéricos, revisão textual exacta, datas/período, chave estável, nova chave para novo fundamento e apresentação/recuperação de recusa |
| Percurso conjunto | 33 verificações em `1aa5762a0c16`, após o HTTP industrial; nove lançamentos/19 linhas e fecho único, incluindo perda de direitos industriais e sucessora industrial do mesmo valor antes de fechar |
| Concorrência `e3009c989fb2` | 6 processos reais:1 leitor e5 escritores. Espera no bloqueio da empresa, cadeia até à transacção detentora observada em `pg_stat_activity`; leitor termina antes da libertação; versão industrial alterada/confirmada causa409 depois da libertação; duas aplicações recuperam o mesmo lançamento e dois fechos recuperam o mesmo fecho |
| Demo `072ef8124ab4` | 40 verificações de três perfis, links efectivos e controlos; quatro delas simulam o formulário do período em Node VM. Sem comandos de negócio. Hash antes/depois confirma fontes/outbox/direitos preservados, sem lançamento industrial ou fecho |
**162 verificações dirigidas**, incluindo9 verificações simuladas de formulário, mais a prova de6 processos concorrentes. Os13 casos de regressão são transaccionais e não consomem a demo. A primeira execução do teste adicional de produção apanhou uma `ValidationException` esperada que o auxiliar não capturava; corrigiu-se o auxiliar, preservando o comportamento de recusa do produto, antes de gerar a prova válida.
| Resultado conjunto na regressão | Valor |
|---|---:|
| Vendas/recebíveis:4 lançamentos/9 linhas | Bruto2400 por lado; saldo cliente400 |
| Custo directo e correcção:3 lançamentos/6 linhas | Bruto845 por lado; saldo custo295 |
| Fornecedor:1 lançamento/2 linhas | Bruto60 por lado; dívida financeira60 |
| Industrial:1 lançamento/2 linhas | Bruto1800 por lado; saldo industrial1800 |
| **Conjunto:9 lançamentos/19 linhas** | **Débitos5105 = créditos5105MZN;1 fecho** |
| Residual industrial | **300MZN fora do diário** |
As conferências finais comparam a origem industrial actual com a fotografia lançada, validam o equilíbrio SQL e confirmam que toda a outbox industrial continua `captured_no_stock_or_accounting`. A comparação de hash dos fornecedores de período preserva o comportamento anterior quando o fornecedor industrial está desligado, incluindo a demo8057: três painéis, sem schema industrial e impressão digital original dos dados/direitos intacta. Provas antigas válidas e pacotes congelados são conferidos por hash, não repetidos ou substituídos.
## Limitações preservadas
A demo8058 inicia-se com o custo directo275 lançado e fontes disponíveis de venda1000, fornecedor60, sucessor directo295 e industrial1800. Abertura de recebíveis, aplicações adicionais, correcção e fecho continuam por decisões individuais. As regressões consumidas estão em bases diferentes. Demos anteriores e comprovativos não foram repostos.
Sem stock valorizado, folha salarial, contas ou enquadramento fiscal real, pagamentos novos, correcção industrial, reabertura, instalação no destino, activação de Compras ou publicação. Os seis registos protegidos e a cache bloqueada não foram usados ou alterados. Alterações alheias preservadas; credenciais permanecem fora do repositório.
Revisão visual permanece pendente: HTTP e Node VM não são prova de navegador ou aceitação da equipa. Carga sustentada/concorrência em volume e capacidade de implantação continuam pendentes distintas; os ensaios pequenos não validam operação real ou a aplicação inteira. Não se acrescentaram experiências de índices nem se aplicaram índices no destino.
+29
View File
@@ -0,0 +1,29 @@
# Proposta agrupada — lote industrial validado e Contabilidade QA
03/11/2026. `COMMON-LEDGER-INDUSTRIAL-SIM-v1`. **Autorização expressa recebida: «Autorizar o ciclo industrial sintético proposto». Implementado e testado no recorte abaixo; ver [entrega e limitações](GENERAL_LEDGER_INDUSTRIAL_DELIVERY.md).** A proposta aprovada foi arquivada por hash antes desta anotação. A decisão pedida no fim é histórica, não aceitação ou autorização operacional. A composição de vendas/fornecedor/custo directo está [entregue separadamente](GENERAL_LEDGER_COMPOSITION_DELIVERY.md).
## Resultado delimitado proposto
Reutilizar `IndustrialCostFixture` e os workflows efectivos de `IndustrialCosts`:20KG×50=1000 material,300MIN÷60×100=500 trabalho, conjunto CIF600/capacidade10HM×utilização5HM=300 imputados. Resultado industrial1800, produção10UN e custo180/UN. O residual300 mantém-se separado, sem lançamento automático. Estes valores são hipóteses artificiais já usadas no custeio industrial, não políticas reais.
Criar/calcular/rever explicitamente as entradas, taxas, critério e resultado por identidades distintas numa base QA nova55439; preservar as bases existentes. Não fabricar aprovações por SQL. Uma origem contabilística industrial tipada conserva lote, produto, período,10UN, entradas/taxas/critério/resultados e respectivas versões/hashes. Falta de taxa, produção não concluída, critério pendente ou resultado não vigente impede a captura, sem total inventado.
Uma proposta de duas linhas no **mesmo escritor comum**, com prévia1800 e revisão distinta: D `QA-CUSTO-INDUSTRIAL`1800 / C `QA-COMPENSACAO-INDUSTRIAL`1800. Contas artificiais de compensação de ensaio, sem política de inventário, salários, capitalização ou PGC real. O diário não altera quantidades, consumos, outbox, dívida ou orçamento.
Um efeito estável por lote/perímetro evita duplicação por versão. Não somar novamente origens contabilizadas como custo directo ou reconhecer o mesmo lote em dois caminhos: recusar origens reutilizadas/ambíguas antes de propor. O cenário usa origens industriais sintéticas distintas das ordens já contabilizadas. Correcção de resultado industrial já lançado fica fora deste recorte; alteração posterior fica visivelmente pendente e bloqueia o fecho até futura resolução autorizada.
Ligar lote→resultado/decisões→captura/impacto→diário→balancete/razão→conferência/fecho QA. Acrescentar painel industrial paginado à composição apenas quando explicitamente configurado. A comparação orçamental existente permanece consulta do seu motor, sem lançamento do orçamento ou segunda autoridade de custo.
## Direitos e provas propostas
Só nas fixtures novas: preparador com `industrial_costs.view/prepare`, `general_ledger.view/prepare/post/period_prepare/period_close`; validador distinto com `industrial_costs.view/validate`, `general_ledger.view/validate/period_validate`; leitor com os dois direitos `.view`; contexto `.view` de empresa/unidade. Reutilizar os direitos existentes. Sem direito novo, associação a nome real ou concessão pública/real. Direitos dos outros percursos apenas se a nova fixture também os compuser explicitamente.
Provar montantes exactos, residual separado, isolamento/direitos/pessoas, incompletude, dependências/versões alteradas, origem duplicada, falhas transaccionais, repetição e concorrência sem duplicar efeito/fecho. Uma base de regressão e outra de demonstração, sem consumir as anteriores. Conferência de período integra todas as fontes configuradas. Provas anteriores válidas são reutilizadas; revisão visual/carga/implantação separadas.
## Exclusões e decisão necessária
Sem stock valorizado, folha salarial, pagamento/recebimento novo, contas/políticas/operações reais, correcção industrial, reabertura, instalação no destino, activação de Compras, publicação, aceitação ou checkpoint.
O [AGENTS.md](../AGENTS.md) delimita as aprovações contabilísticas anteriores. A [especificação aprovada da correcção directa](GENERAL_LEDGER_DIRECT_COST_CORRECTION_SCOPE.md), em «Exclusões preservadas», exclui expressamente **«salários/CIF/lote industrial»**. A autorização pedida retira apenas a exclusão de implementar/provar o lote/CIF seleccionado neste novo ensaio; todas as restantes exclusões mantêm-se.
**Decisão pedida:** autorizar o ciclo industrial sintético1800/10UN, com contas artificiais, direitos existentes apenas QA, revisão distinta, relatórios e fecho pelo mesmo núcleo, nos termos acima.
@@ -0,0 +1,15 @@
# Recuperação de comprovativos contabilísticos — 03/11/2026
Extensão posterior: [reconhecimento e liquidação de fornecedor](FINANCIAL_RECEIPT_RECOVERY_DELIVERY.md) agora consultáveis por domínio explícito na mesma área contabilística. O endpoint original e os limites desta entrega mantêm-se; não é uma consulta universal dos restantes motores.
Implementada consulta por chave UUID no mesmo núcleo: `GET /api/general-ledger/receipts/{key}`. Recupera exclusivamente comprovativos do utilizador actual, no tenant/empresa/unidade seleccionados, com direito contabilístico de consulta e identidade financeira actuais. Outro autor, âmbito diferente ou chave inexistente não revela o comprovativo. Não aceita contexto por parâmetros.
Mostra chave, data, hash do pedido e resultado original. É evidência histórica, não conferência da fonte actual nem nova execução. Usa uma fotografia `REPEATABLE READ READ ONLY`, sem bloqueios de escrita; uma consulta lê um comprovativo, sem listar o universo. Não cria efeitos, eventos ou chaves novas. A ausência na captura não prova que o comando falhou e não autoriza repetição automática.
Diário, vendas, custo directo, industrial e painel conjunto reutilizam o mesmo formulário de recuperação. Os erros dos comandos apresentam a chave do pedido. O resultado é mostrado como texto, sem HTML executável. O formulário faz apenas GET e não reenvia comandos. Não se acrescentaram direitos, migrações ou dependências.
Provas numa base/role nova55439 (`922dac0c0596`), com custo275 efectivamente capturado/revisto/aplicado pelos workflows existentes:10 verificações de serviço,16 HTTP e3 do JavaScript renderizado em Node VM. Cobrem resultado original/repetição de consulta, autor diferente, unidade estrangeira elegível, direito revogado, UUID inválido, autenticação/contexto/módulo, ausência, `no-store`, transacção de leitura, zero bloqueios, renderização e GET sem execução. Fontes/direitos/comprovativos preservados e um só lançamento. Não se repetiram suites financeiras alheias.
Manifesto: [provas e hashes](proofs/ledger-receipt-recovery-20261103.json). Demos e provas anteriores, seis associações e cache bloqueada intactas. Sem publicação, activação de Compras, operações reais, aceitação ou checkpoint. A consulta também não concede acesso a comprovativos de outro perfil para revisão: cada perfil consulta as suas próprias chaves, e a revisão partilhada conserva as páginas de evidência já existentes.
Limites: não recupera uma chave que o utilizador já não possui, não é arquivo de relatórios nem mecanismo transversal aos outros motores financeiros. Não armazena automaticamente pedidos no navegador. Uma captura anterior não valida dependências presentes. Revisão visual, carga sustentada e implantação permanecem pendentes; HTTP/Node VM não são prova visual.
+56
View File
@@ -0,0 +1,56 @@
# Balancete e razão por conta — consulta integrada de ensaio
03/11/2026. `COMMON-LEDGER-REPORTS-SIM-v1` implementado localmente sob a continuação de desenvolvimento e integração. Apenas leitura dos lançamentos existentes, reutilizando `general_ledger.view`; sem novos direitos, motores de dívida, efeitos contabilísticos ou instalações no destino. Preserva os recortes contabilísticos anteriormente autorizados.
## Resultado funcional
O núcleo comum fornece balancete de ensaio por conta e razão com saldo acumulado. Os adaptadores SGF e SGC autónomo expõem a mesma interface HTML e APIs:
- `/general-ledger/trial-balance` e `/api/general-ledger/trial-balance`;
- `/general-ledger/account-ledger` e `/api/general-ledger/account-ledger`.
Os filtros `from_on` e `to_on` são obrigatórios, datas válidas e inclusivas. O razão exige `account_id`; o balancete pode também restringir uma conta. `page` é limitado a 100.000 e `per_page` a **25 ou 100**. Parâmetros desconhecidos, datas invertidas/impossíveis e contas externas ao âmbito são recusados. Não se aceitam tenant/empresa/unidade do pedido como autoridade.
A abertura considera lançamentos anteriores ao início; débitos/créditos de movimento incluem todo o intervalo; o saldo final soma abertura e movimento. O balancete inclui contas com lançamentos até à data final, inclusive contas sem movimento no intervalo que ainda contribuem para a abertura. Contas apenas com movimentos futuros não entram. Totais são calculados sobre todo o filtro, independentemente da página. No razão, a janela SQL calcula o saldo acumulado antes da paginação, ordenando por data, lançamento, linha e ID; a segunda página não reinicia o saldo.
O balancete liga ao razão preservando datas e tamanho da página. Cada linha do razão conserva tipo de efeito, lançamento, proposta/revisão, autor, fundamento, data e versão da fonte. No SGF, origens de venda ligam ao percurso Comercial → Recebíveis → Contabilidade; as restantes fotografias continuam no diário. A consulta soma os lançamentos elegíveis das fontes compostas, sem refazer a posição financeira nem presumir nova emissão, dívida ou liquidação.
O marcador de consulta inclui âmbito, data final, número de lançamentos e último ID até essa data. Identifica o estado append-only observado e detecta também uma inserção posteriormente retrodatada. **Não é fotografia persistida, assinatura, aprovação de fecho ou relatório legal.** Os montantes usam inteiros exactos em cêntimos, agregação SQL `numeric` e recusa de valores fora da representação inteira suportada; não há aritmética monetária em float.
## Isolamento e disponibilidade
As três relações usadas nas agregações — linhas, lançamentos e contas — recebem o mesmo filtro de tenant/empresa/unidade. Não basta validar o ID da conta. Autorizações e contexto correntes são verificados antes da consulta. SGF exige Contabilidade; SGC mantém o contexto financeiro nativo e a pessoa/permissão explícitas. Direito revogado é recusado.
Cada leitura HTTP própria usa transacção **repeatable read/read only**, sem `FOR UPDATE`, para conservar coerência entre totais, página e marcador. Um livro disponível sem factos é identificado como vazio; tabela necessária ausente responde **503**, sem converter indisponibilidade em saldo zero. Esta prova identificou que o adaptador SGC não tinha essa verificação explícita para o novo relatório: foi acrescentada antes da leitura. A tentativa inicial falhou na prova, foi revertida e não é contada como aprovação; a prova corrigida passou.
Não há comandos nos formulários HTML nem exportação ilimitada. Só as linhas da página são materializadas no PHP; agregações e saldo acumulado correm na base. O balancete usa **três consultas de relatório** — totais, página e marcador — tanto com 25 como com 100 contas. Este número exclui consultas de sessão, autorização e disponibilidade do schema; não representa o total de consultas HTTP. O razão tem consultas adicionais de conta, contagem e janela; não se afirma que use apenas três.
## Provas novas e reutilizadas
[Manifesto de provas e hashes](proofs/common-ledger-reports-20261103.json). Foram criadas duas bases exclusivas para os testes dos relatórios, separadas de demonstrações e de provas anteriores. Em cada uma, um reconhecimento de fornecedor60 vem do workflow existente; outros **130 lançamentos de teste / 260 linhas contabilísticas** foram gerados explicitamente por SQL para exercitar contas, datas e paginação. Estes 130 lançamentos são dados artificiais do relatório, identificados como `report.fixture`; **não são 130 dívidas reconhecidas ou execução do writer**. Todas as constraints de equilíbrio/fotografia foram conferidas. Nenhuma obrigação, pagamento ou afectação financeira adicional foi criado por esse gerador.
| Prova | Resultado |
|---|---|
| Serviço SGF | 21 verificações: datas, abertura/movimento/fecho, paginação, saldo entre páginas, acesso revogado e preservação financeira |
| Serviço SGC | As mesmas 21 verificações sobre o adaptador nativo e núcleo único |
| HTTP SGF / SGC | 21 / 20 verificações: API e HTML, consulta autenticada, recusas, evidências, cache no-store, 25/100 e leitura coerente |
| Isolamento SGF / SGC | 8 / 8 verificações: livros estrangeiros de tenant/empresa/unidade excluídos, contas estrangeiras recusadas e fonte ausente503; tudo revertido |
| Vendas e reversão efectivas | 6 verificações só de leitura sobre a prova válida de quatro lançamentos/nove linhas; 2.400 MZN brutos por lado, contas reconciliadas |
| Cliente + fornecedor no mesmo livro | 7 verificações só de leitura, dois lançamentos/cinco linhas; 1.060 MZN por lado, IDs financeiros coincidentes sem mistura |
| Ciclo fornecedor SGC com reversão e correcção | 5 verificações só de leitura, cinco lançamentos/dez linhas; 220 MZN por lado e contas reconciliadas |
| Distribuição autónoma nova | 6 verificações, runtime e interface carregados do artefacto fixado por hash, um lançamento real do workflow e nenhuma exigência de Sales |
| Artefacto autónomo anterior | Capacidade de relatório ausente responde503; não foi substituído nem alterado |
Os três livros de integração anteriores foram observados sem repetir os percursos de escrita: os fingerprints de lançamentos, linhas, propostas, decisões, histórico e períodos disponíveis ficaram idênticos. As provas válidas anteriores são referenciadas e verificadas por hash. O único erro inicial de preparação SGF ocorreu antes de criar o reconhecimento, por carregamento tardio da variável da fixture; o helper foi corrigido e a mesma base ainda vazia foi preparada sem reset.
O artefacto QA novo contém **30 ficheiros**, manifesto `cbc4ddbea15f5e396c92bc2e664b973138551928980f334bcf3eb0cf097cacb1`. Inclui apenas runtime/README dos núcleos, sem credenciais ou fixtures. Foi ensaiado numa terceira base nativa própria. O artefacto congelado anterior de25 ficheiros, as demonstrações existentes e o pacote do destino ficam intactos. A publicação e substituição do pacote instalado não fazem parte desta entrega.
Sintaxe PHP/JavaScript, `git diff --check` dos dois repositórios e verificações dirigidas Pint/PHPStan dos dois ficheiros nativos alterados constam do manifesto. O SGF não tem Pint/PHPStan instalados. As primeiras invocações do analisador nativo falharam por configuração de autoload — símbolos comuns ausentes e depois duas cópias do Payables; a execução final usa um único caminho canónico, bootstrap explícito e cache privada, sem modificar dependências ou apagar caches.
## Utilização e limites
No SGF, abrir a demonstração existente **http://127.0.0.1:8053/qa/sales-demo**, escolher um perfil e seguir Diário e extracto → **Balancete e razão por conta — Outubro de 2026 (QA)**. No ciclo nativo canónico8051 existe a mesma ligação. O conteúdo reflecte apenas as decisões já registadas nessa demonstração; uma base ainda sem lançamentos aparece vazia e não é preenchida automaticamente. A demonstração8052 conserva o pacote congelado anterior e recusa este relatório por não ter essa capacidade composta.
As bases com os 130 lançamentos artificiais são exclusivamente de regressão e não foram transformadas em demonstrações da equipa. Não houve nova execução de suites financeiras/stock alheias, movimentos em dados reais, novos direitos, migrações no destino, limpeza da cache bloqueada, alteração dos seis registos, publicação, activação de Compras, checkpoint ou aceitação presumida.
Revisão visual, carga sustentada e capacidade de implantação continuam pendentes e separadas. Os ensaios de131 lançamentos por base verificam resultados/paginação; não substituem as medições anteriores de1.000/5.000/10.000 nem validam relatórios de grande volume. Sem índices novos, demonstrações financeiras fiscais, contas legais, saldos iniciais importados, consolidação de empresas, conversão de moedas ou contabilidade de stock/custos/salários.
@@ -0,0 +1,70 @@
# Comercial → Recebíveis → Contabilidade — entrega sintética
03/11/2026. `COMMON-LEDGER-SALES-RECEIVABLE-SIM-v1` implementado localmente após a autorização expressa «Autorizar o ciclo sintético proposto», no [recorte apresentado](GENERAL_LEDGER_SALES_RECEIVABLE_SCOPE.md). Inclui código, interface, provas e demonstração própria. Não equivale a aceitação, checkpoint ou conclusão operacional de toda a aplicação.
## Percurso entregue
A factura vem do workflow existente de emissão de teste, incluindo série, cálculo, decisões e PDF imutável. Base **862,07**, imposto documental **137,93**, total **1.000,00 MZN**; o cálculo exacto **137,9312** e a diferença **0,0012** continuam preservados. Não foi criada outra política fiscal.
O núcleo contabilístico único recebe callbacks explícitos do host SGF. O reconhecimento tem três linhas: D `QA-CLIENTES` 1.000 / C `QA-VENDAS` 862,07 / C `QA-IMPOSTO-TESTE` 137,93. A obrigação a receber exige a aprovação financeira existente e não gera outro reconhecimento contabilístico. Recebimentos confirmados de 400 e 600 são afectados explicitamente; cada afectação é capturada, revista por identidade distinta e lançada, D `QA-LIQUIDACAO-CLIENTE` / C `QA-CLIENTES`. A reversão financeira de 400 exige a decisão existente e origina uma proposta contabilística inversa; não devolve dinheiro.
O percurso integral termina com **quatro lançamentos, nove linhas, débitos/créditos brutos de 2.400 MZN e saldo de clientes/recebíveis de 400 MZN**. O fecho QA exige conferência distinta do conjunto de factos e configuração e revalida tudo após obter a serialização da empresa. Não há reabertura.
A interface liga documento/PDF, posição financeira, propostas, decisões, afectações, reversão, impactos contabilísticos, versões, diário/extracto e fecho. As listas são paginadas no servidor em janelas de 25; decisões são lidas em conjunto para os registos visíveis. Não se recalcula a dívida num segundo motor: a posição usa o estado autoritativo de `ServiceReceivables`. As trocas Comercial/Financeiro/Contabilidade são explícitas e verificam a geração de contexto antes do comando. Uma página desactualizada não se autoactualiza para aprovar no contexto de outra aba. Falhas na obtenção do PDF e recusas financeiras devolvem o contexto corrente à Contabilidade.
## Integridade e composição
`SalesSchema` só instala numa base QA SGF nova, com livro vazio. O writer anterior foi alargado, não copiado. As constraints diferidas conferem a quantidade de linhas, contas, montantes e fotografia exacta revista; o trigger de inserção de linhas recusa inclusive uma terceira linha acrescentada posteriormente a um lançamento de duas linhas. A quarta linha é recusada. Originais e decisões permanecem append-only.
As confirmações repetidas revalidam permissões/contexto antes de recuperar o resultado; versões/fontes/regras/períodos alterados exigem nova conferência. Recibos de idempotência, lançamento, linhas e histórico pertencem à mesma transacção. As falhas injectadas nas quatro fronteiras de escrita foram revertidas e a repetição recuperou sem duplicar.
Foi encontrado e corrigido um caso de integração: a obrigação de cliente e a de fornecedor podem ter o mesmo ID inteiro em tabelas diferentes. O filtro antigo `obligation_id` ficou expressamente limitado a efeitos de fornecedor; `sales_invoice_id` identifica a origem comercial. A prova mista mantém um lançamento de cada tipo no mesmo livro e confere ambos no fecho, sem misturar eventos ou totais. A origem de fornecedor desta prova é uma recepção sintética controlada; não demonstra importação histórica SGF viva ou composição completa da interface de Compras.
O SGC autónomo continua a funcionar sem Sales e recusa explicitamente estas origens quando não estão compostas. O artefacto financeiro congelado da entrega anterior e a demonstração 8052 não foram substituídos. As instalações/demos anteriores não receberam o novo schema.
## Guardas e direitos
A opção `SGF_SALES_LEDGER_QA` fica desligada na ausência de configuração. A extensão aceita apenas `testing`/`browser-testing`, opção explícita, PostgreSQL loopback **55439**, cluster de regressão esperado, base `payable_sgf_<12 hex>` e role não elevada `payable_history_sgf_<mesmo identificador>`, com destino efectivo conferido. A regra antiga de `sgf_tempo_test` não foi retirada. Os instaladores existem apenas no harness explícito; o arranque não aplica migrações.
Foram reutilizados direitos existentes, exclusivamente em novas fixtures:
| Perfil QA | Contabilidade | Recebíveis |
|---|---|---|
| Preparação | view, prepare, post, period_prepare, period_close | view, prepare, allocate, correction_request |
| Validação | view, validate, period_validate | view, confirm, correction_approve |
| Consulta | view | view |
São **sete direitos contabilísticos distintos e nove concessões contabilísticas por fixture**, sem os direitos de correcção técnica desnecessários neste ciclo. Os três perfis têm consulta da factura de teste e contexto empresa/unidade. A emissão inicial reutiliza o workflow e identidades fiscais da fixture; a revisão contabilística não concede competência fiscal. As permissões auxiliares do construtor de fixtures foram removidas antes de entregar a nova demonstração. Nenhuma concessão real ou pública foi alterada.
O isolamento aplica-se a tenant, empresa, unidade e associações de módulo. Uma origem não partilhada não aparece no selector nem pode ser capturada pelo ID. Continua a bloquear o fecho se estiver por contabilizar: esconder uma origem da interface não a transforma num período completo.
## Provas
[Manifesto com hashes e resultados](proofs/common-ledger-sales-receivable-20261103.json). As bases de prova e a demonstração da equipa são distintas. Não foram repetidas suites alheias ao incremento.
| Evidência | Resultado |
|---|---|
| HTTP real, CSRF e ciclo completo | 95 verificações; recusas 419/403/409/422, impactos, versões, repetição, quatro lançamentos/nove linhas e fecho |
| Regressão de fonte, regra, período, guardas e recuperação | 3 cenários / 29 verificações; alterações revertidas |
| Schema final e isolamento | 12 verificações; tenant/empresa/unidade, direitos revogados, terceira linha tardia, quarta linha e paginação do histórico |
| Associações por módulo | 4 verificações, incluindo completude do período; alterações revertidas |
| Ciclo completo no schema final | 10 verificações, reconciliação final de documento/PDF/contas e leitura HTTP adicional de 10 verificações |
| Concorrência | 6 processos reais; detalhes abaixo |
| Compatibilidade fornecedor SGF / ciclo SGC | 74 asserções / 23 verificações; SGC também recusa Sales sem capacidade composta |
| Coexistência cliente/fornecedor | IDs coincidentes, filtros/eventos/totais separados, dois lançamentos/cinco linhas e fecho conjunto |
| Demonstração nova | 29 verificações HTTP, três perfis, zero efeitos financeiros/contabilísticos iniciais |
| Formulários renderizados | 10 verificações em Node VM: tipos exactos, chaves estáveis, recusa de geração antiga e recuperação de contexto/PDF |
Na concorrência, dois aplicadores aguardaram a transacção que detinha o bloqueio da empresa; PostgreSQL identificou esperas `tuple`/`transactionid` e a cadeia até ao processo titular. Uma consulta terminou antes da libertação, vendo apenas o estado confirmado. Após rollback do titular, ambos terminaram com **o mesmo lançamento de três linhas**, sem duplicação. Outra confirmação de fecho aguardou uma afectação de 400 que foi efectivamente confirmada pelo titular: respondeu **409**, exigindo nova conferência. Depois de contabilizar a afectação e rever nova fotografia, dois fechos concorrentes devolveram **o mesmo fecho e a mesma versão 2**. Este cenário termina em saldo **600**, dois lançamentos/cinco linhas, e é distinto do percurso integral que termina em 400. Uma verificação posterior, só de leitura, comparou explicitamente a factura actual com `document_revision` nos dois lançamentos e confirmou o hash do PDF.
As provas de 95 verificações HTTP e concorrência precedem o reforço SQL da inserção tardia; continuam válidas para o comportamento nelas medido. O novo schema foi comprovado separadamente pelo ciclo integral, provas SQL/isolamento, coexistência e leitura HTTP final. Uma tentativa inicial de prova de contexto estrangeiro falhou no helper de dados e foi revertida; não é contada como prova aprovada. A prova corrigida usa outra base. O campo histórico `default_sales_flag` da primeira reconciliação final representa a configuração QA activa; a prova específica `sales-defaults.json` verifica separadamente o default ausente **false**.
Os formulários foram exercitados com DOM/rede simulados sobre o JavaScript efectivamente renderizado. Isto não é execução num navegador nem revisão visual. A sintaxe PHP/JavaScript afectada e `git diff --check` são registados no manifesto. PHPStan/Pint não estão instalados neste SGF; não se declaram essas ferramentas executadas nem se acrescentaram dependências.
## Demonstração e limites
Entrada: **http://127.0.0.1:8053/qa/sales-demo**. Escolher Preparação, Validação ou Consulta; o guião permite abrir várias sessões/perfis e percorrer o circuito. Base, sessão, assets e cookie próprios, só loopback. Começa com uma factura realmente emitida pelo workflow de teste e **sem obrigações, recebimentos, afectações ou lançamentos**, para a equipa decidir individualmente. Não usar a demonstração como fixture descartável nem reiniciar decisões da equipa.
Continuam pendentes e separados: revisão visual, carga sustentada e capacidade de implantação; classificação/contas/fiscalidade reais, desenho de permissões SQL operacional e composição operacional entre módulos. Não foram medidos novos volumes de 1.000/5.000/10.000 para este ciclo, criados índices ou declarada capacidade a partir destes ensaios. As provas de carga anteriores permanecem preservadas com o seu âmbito original.
Não foram feitos uso real, migração no destino, publicação, push, activação de Compras, reabertura, lançamentos de stock/custos/salários ou alterações de direitos reais. Os seis registos sem associação, a cache bloqueada, os checkpoints anteriores, as demonstrações anteriores e o trabalho alheio ficaram fora das escritas deste incremento. Não se criou checkpoint nem se presumiu aceitação.
@@ -0,0 +1,19 @@
# Próximo ciclo contabilístico — vendas e recebimentos sintéticos
**Autorização expressa recebida: «Autorizar o ciclo sintético proposto». Implementação e provas concluídas no recorte sintético; ver [entrega e limites](GENERAL_LEDGER_SALES_RECEIVABLE_DELIVERY.md).** O texto abaixo conserva o recorte apresentado para completar Comercial → Financeiro → Contabilidade, usando o mesmo writer e preservando as aprovações anteriores. A decisão pedida no final é histórica, não uma nova pendência de autorização.
`COMMON-LEDGER-SALES-RECEIVABLE-SIM-v1`, proposto como uma entrega funcional conjunta:
1. Criar nova composição SGF de regressão e outra de demonstração, no cluster55439, com roles não elevadas próprias. Reutilizar os workflows de factura/recebíveis de teste, preservando séries, versões, cálculo e revisões. Ampliar a guarda QA apenas para esse destino efectivo isolado, sem retirar qualquer bloqueio real nem usar/resetar `sgf_tempo_test` ou demos existentes.
2. Reutilizar o cenário de `ReceivablesFixture`: base862,07 + imposto documental de teste137,93 = **1000,00MZN**, vindo do cálculo já aprovado `862,07×16%=137,9312`, truncagem documental e diferença preservadas. Emitir pelo workflow de teste existente, com aviso sem validade fiscal; não fabricar factura ou aprovação viaSQL. Isto não aprova taxa/imposto/contas reais.
3. Um reconhecimento contabilístico por factura de teste emitida, com revisão distinta: **D `QA-CLIENTES`1000 / C `QA-VENDAS`862,07 / C `QA-IMPOSTO-TESTE`137,93**. Generalizar o writer/constraints para três linhas sem duplicar o motor e mantendo o ciclo de fornecedores. A abertura da obrigação a receber não cria um segundo reconhecimento da mesma venda.
4. Reutilizar o núcleo de recebíveis existente: recebimentos sintéticos400 e600, confirmação independente e afectações explícitas; saldos600 e0. Só afectação efectivamente confirmada origina contabilização, respectivamente **D `QA-LIQUIDACAO-CLIENTE`400/600 / C `QA-CLIENTES`400/600**. Recebimento não afectado não liquida nem lança automaticamente contra a dívida.
5. Reutilizar o circuito aprovado de reversão de afectação400: decisão independente, originais imutáveis, saldo volta a400. Contabilização da reversão: **D `QA-CLIENTES`400 / C `QA-LIQUIDACAO-CLIENTE`400**. Sem devolver dinheiro, nota de crédito, anulação fiscal ou segundo reconhecimento comercial.
6. Ligar fonte, versões, decisões, impactos, lançamentos/extracto e posição financeira na interface, com os mesmos mecanismos de identidade/contexto e idempotência. O fecho QA só pode incluir estes novos efeitos depois de os conferir, com hash conjunto e recusa de pendências/alterações. Sem reabertura. O SGC autónomo continua sem exigir Sales; recusa essas origens se a capacidade não estiver composta.
7. Provar o percurso completo, montantes exactos, isolamento, revisões, direitos revogados, concorrência, falhas/recuperação e ausência de duplicação. Reutilizar provas anteriores; executar só regressão afectada pela generalização de linhas/fontes. Demonstração nova, sem consumir os dados da equipa nos testes destrutivos.
Direitos apenas nas fixtures novas: reutilizar os dez `general_ledger.*` já aprovados e os direitos existentes de emissão de teste/recebíveis, distribuídos entre preparador, validador fiscal, revisor e consulta conforme os circuitos existentes. **Não se propõem direitos públicos/reais novos**, herança de Administração ou pessoas reais obrigatórias. Matriz da fixture explícita antes de qualquer concessão QA; nenhuma competência fiscal é inferida da contabilidade.
Excluídos: stock/custos/salários contabilizados, novas políticas ou contas reais, emissão fiscal real, uso empresarial, ligação bancária/execução monetária, reabertura, alteração dos seis registos/cache/demos, instalação no destino, activação de Compras, publicação, aceitação ou checkpoint. Revisão visual e capacidade de implantação continuam separadas.
**Decisão pedida:** autorizar este ciclo sintético agrupado, incluindo os novos efeitos de venda/afectação/reversão e a adaptação do mesmo writer para três linhas. A autorização anterior fica preservada, com o seu âmbito; a aceitação do resultado será posterior.
@@ -0,0 +1,71 @@
# Stock físico → valorização → diário QA
**Continuação técnica:** [conferência de dependências anteriores em lotes](STOCK_PREFIX_STREAM_DELIVERY.md),48 verificações e comparação de1.000/5.000/10.000 referências de metadados. A limitação de materialização descrita historicamente no fim deste documento foi tratada na fonte; os pacotes das demonstrações permanecem congelados e a capacidade de implantação continua pendente.
03/11/2026. `COMMON-LEDGER-STOCK-VALUATION-SIM-v1`, autorizado expressamente no [recorte](GENERAL_LEDGER_STOCK_VALUATION_SCOPE.md). **Código funcional, integração, provas e demonstração local entregues.** Nenhuma instalação, política, conta ou operação real foi activada.
## Resultado demonstrado
| Origem efectiva | Quantidade | Valorização a50MZN/UN | Lançamento artificial |
| --- | ---: | ---: | --- |
| Recepção aceite |2UN|100MZN|D QA-STOCK / C QA-COMPENSACAO-STOCK|
| Saída interna autorizada/entregue |−1UN|50MZN|D QA-CONSUMO-STOCK / C QA-STOCK|
| Excedente declarado e recebido distintamente |+0,5UN|25MZN|D QA-STOCK / C QA-CONSUMO-STOCK|
| Final |1,5UN|75MZN de stock|Consumo líquido25MZN|
Três lançamentos/seis linhas; débitos/créditos brutos175MZN. Balancete, razão e fecho QA usam o mesmo núcleo contabilístico anterior. O writer contabilístico não volta a mover quantidades, reconhecer factura/obrigação, consumir orçamento ou criar pagamento.
Recepção, requisição de armazém, submissão, autorização, entrega, reconhecimento de recepção pelo destinatário, declaração de excedente e recepção independente da devolução foram executados pelos serviços efectivos de Compras. Os writers físicos comuns e o seu livro original foram reutilizados. A ordem já emitida e os cadastros anteriores são fixture; **não se repetiu nem se declarou provado todo o procurement anterior à ordem**. A taxa50 é uma decisão de ensaio distinta, não deduzida automaticamente do preço comercial da fixture.
## Integração e controlos
`StockSchema`, `StockValuation` e `StockComposition` acrescentam origens tipadas ao mesmo `PayableJournal`; não criam um motor de lançamentos alternativo. O adaptador explícito QA usa a mesma transacção/base e o mesmo bloqueio da empresa que os serviços físicos. Revalida identidade, função organizacional, pessoa e direitos antes de comandos e repetições. O cenário utiliza os direitos contabilísticos existentes, funções físicas existentes e permissões de leitura apenas nas fixtures novas.
A taxa tem proposta/versionamento e revisão imutáveis por pessoa distinta. Uma sucessora pendente ou ausente torna o valor incompleto; uma sucessora com o mesmo montante invalida a conferência anterior. Alterar a taxa após lançamento é recusado neste recorte. Chave repetida com conteúdo diferente recusa; repetição exacta devolve o comprovativo, sem segundo efeito.
A captura conserva artigo, armazém, unidade, movimento, taxa/revisão, documentos/operadores físicos, saída original da devolução, versões e hashes. A aplicação relê esses factos. **Os movimentos físicos anteriores do livro têm de estar contabilizados primeiro**: não se valoriza saída antes da entrada ou devolução antes da saída. As dependências contabilísticas são identificadas, não lançadas automaticamente. O serviço e a guarda SQL impõem a sequência.
O SQL impede duplicação do movimento mesmo com outra chave de efeito, revista a ligação entre origem/taxa/quantidade/contas e conserva as verificações de equilíbrio/revisão distintas existentes. Foi recusada uma fonte PHP adulterada com um cêntimo adicional e outra com valor correcto mas entrada contabilística em falta. Não se alteraram triggers do livro físico.
## O que o SGF faz nesta entrega
`StockValuationRead` liga explicitamente o contexto SGF ao livro nativo autorizado com uma role SQL SELECT-only. Exige **stock.view e general_ledger.view** na unidade actual, módulo Contabilidade, token actual e identidade física QA. Fontes ausentes/incompatíveis devolvem indisponibilidade, sem inventar zero. Quantidades, lançamentos e linhas são lidos numa captura REPEATABLE READ READ ONLY, com paginação no servidor.
O SGF mostra o valor contabilizado e os movimentos ainda não valorizados, sem copiar um livro ou saldo para a sua base. A navegação só apresenta a ligação quando a composição e os dois direitos estão disponíveis. O mapeamento de tenant/empresa/unidade é explícito: o âmbito nativo0/0 não é equiparado numericamente à empresa/unidade SGF.
**Fronteira explícita:** a confirmação da valorização e a conferência completa das dependências/período correm na composição QA de origem. O SGF é observador autorizado; a sua reconciliação cobre movimentos com lançamento e IDs de taxa, não uma segunda validação independente de todas as dependências actuais. A interface SGF de preparação/confirmação de recepção permanece pendente. Não declarar Compras integralmente instalado no ERP.
## Demonstração preservada para avaliação
- [Composição de origem — preparar, rever e consultar](http://127.0.0.1:8062/qa/stock).
- [SGF — consultar o mesmo livro](http://127.0.0.1:8063/qa/stock-observer/reader?open=1).
Dados físicos iniciais2/−1/+0,5; **zero taxas propostas, zero lançamentos e zero fechos iniciais**. A equipa pode percorrer o ciclo por identidades distintas. A consulta inicial SGF diz «pendente», com três movimentos por valorizar; o valor contabilizado0 não é apresentado como valorização actual do stock.
Pacote comum/adaptador congelados em artefacto privado, manifesto SHA256 `8b3ad1c600b84c8526b2d9f453a1c5c4e174a69d6acc78ace2af4f52a25dd762`. O contrato SQL instalado e a classe de origem coincidem entre a regressão, o ensaio HTTP e a demonstração. Assets SGF compilados numa pasta pública privada desta composição; sem substituir o build ou a cache da instalação principal.
As entradas8060/8061 foram uma preparação anterior desta passagem e permanecem preservadas com o seu pacote; **não são a demonstração final da sequência reforçada**. Usar8062/8063.8059,8039 e anteriores não foram reiniciadas ou reconfiguradas. As decisões iniciais da demonstração final foram conferidas por leitura antes/depois das verificações; não houve reset para a apresentar.
## Provas e limitações
[Manifesto de resultados/fontes/hashes](proofs/common-ledger-stock-valuation-20261103.json): **146 verificações dirigidas**, mais **23 verificações da regressão nativa afectada** pelo núcleo comum. São contagens dos auxiliares aprovados; não constituem169 casos independentes de negócio.
| Prova seleccionada | Verificações | Condição |
| --- | ---: | --- |
| Taxas, origens, versões, sequência e recuperação |31|Casos com rollback e preservação de físico/financeiro/direitos|
| Concorrência |3 + dois trabalhadores|Bloqueador real observado; libertação com repetição200 ou versão de período antiga409, sem duplicação|
| Ciclo/relatórios/fecho |4|Três lançamentos/seis linhas; stock75, consumo25, um fecho|
| Isolamento/pessoa e SQL adversarial |9|Empresa/unidade/tenant, ambos os direitos na mesma pessoa, chave de efeito forjada e montante adulterado|
| SQL da sequência |3|Fonte PHP adulterada não contorna a falta de entrada contabilística|
| Percurso HTTP completo |40|Taxa→revisão→três lançamentos→relatórios→fecho, CSRF, chaves e comprovativos próprios|
| Observação SGF |23 +4|Isolamento, revogação, configuração, origem SELECT-only e alteração de unidade recusada/restaurada|
| JavaScript/React |15 +5|Incerteza sem repetição automática, resposta atrasada descartada, navegação por composição/direitos; sem navegador|
| Demonstração final |9|Leitura, pacote fixado, assets privados e decisões iniciais intactas|
As tentativas de preparação incompletas ficaram preservadas em bases próprias. Corrigiram-se auxiliares de caminho de cache Windows, definição de UN antes da emissão da fixture, normalização da quantidade da devolução e contexto/pertença Financeiro explícitos. Nenhuma guarda foi retirada para os fazer passar. A primeira passagem funcional foi reforçada depois da revisão de dependências; só as provas finais da sequência reforçada são seleccionadas no manifesto. Não somar tentativas anteriores ou suites sobrepostas. A regressão anterior foi reutilizada; repetiu-se apenas o ciclo nativo afectado e as provas que a alteração de sequência mudou.
A taxa fixa de ensaio não valida método de valorização real, fiscalidade, política de custos ou margens. O cenário é exclusivo: **não compõe o mesmo material com custos directos/industriais já lançados**; essa integração continua separada. Não há correcção de valor lançado, reabertura, salário, banco ou pagamento novo. As roles QA são proprietárias das bases novas; não se valida separação owner/runtime de implantação. Paginação foi exercitada funcionalmente, sem ensaio de carga sustentada/throughput.
A conferência de uma origem ainda materializa as referências contabilísticas anteriores do livro. A página exterior25/100 não limita esse prefixo: a memória e o custo podem crescer com o histórico. O recorte provado contém três movimentos; **não se apresenta esta implementação como solução de carga para livros extensos**. A melhoria mínima futura é obter a cobertura anterior por SQL e calcular a evidência por leitura em sequência, evitando carregar todos os IDs/snapshots anteriores. Isto é uma limitação distinta da fila administrativa, cuja leitura conjunta já está implementada e medida.
Revisão visual e capacidade de implantação permanecem pendentes. Seis registos protegidos, cache bloqueada, provas válidas, configurações/direitos reais e trabalho alheio preservados. Sem publicação, instalação no destino, activação de Compras, aceitação ou checkpoint presumidos.
@@ -0,0 +1,33 @@
# Proposta — stock físico valorizado no diário sintético
`COMMON-LEDGER-STOCK-VALUATION-SIM-v1`,03/11/2026. **Autorizado expressamente pelo utilizador: «Autorizar o ciclo sintético proposto».** A autorização retira apenas a exclusão deste desenvolvimento/provas delimitados, sem activar dados, políticas ou instalações reais. Implementação/provas documentadas separadamente; a autorização não constitui aceitação.
## Recorte agrupado proposto
Uma base QA nova55439, uma empresa/unidade, artigo e armazém artificiais; sem reutilizar origens das demonstrações existentes. Reutilizar recepção/saída/devolução efectivas e os writers físicos existentes, com confirmação explícita, identidades e referências mapeadas na fixture. Não construir saldos físicos por SQL para fingir execução.
Valorização exclusivamente sintética a custo de50 MZN/UN, proposto e validado por identidades distintas. Não é escolha de método contabilístico ou política fiscal da Tempo. Movimentos seleccionados: entrada2UN=100; saída1UN=50; devolução da mesma saída0,5UN=25. Estado final1,5UN/75MZN. Cada origem física só pode ter um efeito de valorização reconhecido; as quantidades físicas não são novamente movimentadas pelo diário.
No mesmo núcleo contabilístico, com propostas e revisão distintas antes de aplicar:
| Efeito | Débito artificial | Crédito artificial | MZN |
| --- | --- | --- | ---: |
| Entrada aceite2UN | QA-STOCK | QA-COMPENSACAO-STOCK |100|
| Saída1UN | QA-CONSUMO-STOCK | QA-STOCK |50|
| Devolução0,5UN, limitada à saída original | QA-STOCK | QA-CONSUMO-STOCK |25|
Diário, balancete, razão e conferência/fecho do período QA no núcleo existente: três lançamentos/seis linhas, débitos/créditos brutos175; saldo de stock75 e consumo líquido25. Correcções da taxa, movimentos após a fotografia, ausência de taxa ou quantidades incompatíveis invalidam a conferência; não se fabrica total, se adopta um movimento ambíguo ou se fecha período com pendência relevante.
Não compor estes acontecimentos com os custos directos/industriais já lançados. A origem tem de ser exclusiva e recusar reconhecimento por outro percurso que repetisse o mesmo material. O cenário não capitaliza custo directo/industrial nem volta a reconhecer factura/obrigação/pagamento. A integração futura de custos com materiais já contabilizados exige tratamento explícito dessa fronteira; não será declarada entregue com esta prova.
## Acessos e testes
Reutilizar direitos físicos já existentes dos adaptadores e `stock.view` conforme os workflows efectivos; direitos contabilísticos existentes `general_ledger.view/prepare/post` para preparador, `.view/validate` para revisor distinto e `.view` para leitor. Fecho QA usa os direitos existentes `.period_prepare/period_close` e `.period_validate`. Todas as concessões apenas em fixtures novas, apresentadas antes da execução; sem direito público/real novo ou concessão a pessoas reais.
Provar os workflows efectivos, montantes exactos, versões/dependências, unidade/empresa, revogação, origem reutilizada, separação de preparador/revisor, repetição/concorrência sem duplicação e falha/recuperação transaccional. Reutilizar provas válidas dos writers e dos ciclos anteriores; repetir apenas o que a extensão afectar. Sem inferir carga sustentada, revisão visual ou capacidade de implantação.
## Preservação e exclusões
Preservar8039,8059 e todas as demonstrações, seis registos, cache bloqueada e alterações alheias. Nenhuma alteração de dados/configuração/direitos reais, migração no destino, activação de Compras, publicação, aceitação ou checkpoint. Sem reabertura, correcção de valor já lançado, fiscalidade real, folha salarial, método de valorização real, novos pagamentos ou ligação bancária. A interface SGF de recepção permanece um trabalho técnico separado; este ciclo não declara a instalação completa de Compras.
Autorizar este recorte retiraria apenas a exclusão do desenvolvimento/provas de valorização dos movimentos sintéticos seleccionados, mantendo todas as exclusões acima.
+51
View File
@@ -0,0 +1,51 @@
# Localização e segmentação nos cadastros SGF
03/11/2026. Implementados catálogo territorial paginado, selector comum acessível a partir dos cadastros de empresa/unidade/cliente/fornecedor, confirmação individual, histórico e filtros de segmentação. O catálogo usa a cartografia fornecida, preservando20.407 linhas e a versão exacta já preparada. Os16 testes de preparação foram reutilizados.
## Experimentar na composição nova8069
- [Empresa](http://127.0.0.1:8069/qa/enter/actor?open=1&geography=company).
- [Unidade](http://127.0.0.1:8069/qa/enter/actor?open=1&geography=unit).
- [Cliente sintético associado ao Comercial](http://127.0.0.1:8069/qa/enter/actor?module=commercial&open=1&geography=client).
- [Fornecedores](http://127.0.0.1:8069/qa/enter/actor?open=1): abrir uma ficha e seguir «Localização para segmentação».
- [Consulta de empresa sem edição](http://127.0.0.1:8069/qa/enter/validator?open=1&geography=company).
**A demonstração começa sem localizações atribuídas, decisões ou histórico geográfico.** Tem um cliente QA criado pelo workflow original e associado explicitamente ao Comercial, outro cliente QA sem associação para recusa de acesso e os fornecedores preparados na fixture. A cartografia é referência comum; não é uma associação empresarial. As entradas de perfil são exclusivas do launcher privado em loopback. As demonstrações anteriores, incluindo8068, não foram reconfiguradas.
Escolher província e, quando conhecido, aprofundar distrito/posto/localidade/bairro/aldeia ou quarteirão. Também existe pesquisa por designação. A selecção termina no nível efectivamente conhecido; não se exige chegar à última subdivisão. Registos ambíguos, sem designação ou com ascendência incompleta permanecem visíveis, com motivo de impedimento. Não há escolha inicial nem deduplicação automática.
Depois da escolha, indicar fundamento, conferir o estado anterior/posterior e confirmar. A decisão explícita «deixar localização por indicar» retira a indicação actual, preservando o histórico. O selector não transforma uma caixa vazia numa decisão de remoção.
## O que fica guardado
Localização **para segmentação**, separada do endereço canónico, fiscal ou de entrega. Uma selecção contém paísMZ, versão da fonte, ID original, chave versionada, precisão, designação e componentes textuais intactos. Não atribui validade fiscal, não altera a revisão financeira dos fornecedores nem propaga localizações para ordens, facturas ou registos dependentes.
Empresa e cliente têm a abrangência já existente no cadastro da empresa; o cliente exige a associação explícita ao Comercial. Unidade exige a unidade seleccionada. Fornecedor exige a origem nativa, empresa/unidade e ligação actualmente configuradas. Não se infere partilha entre unidades ou fornecedores de bases diferentes. Localização nunca concede direitos sobre a entidade.
São reutilizados `company.view/edit`, `unit.view/edit`, `clients.view/edit` e `purchasing_suppliers.view/prepare`, juntamente com as funções e guardas originais de Compras. Não há novo direito público. As concessões necessárias aos perfis de ensaio existem só nas novas fixtures; as contas reais não foram alteradas.
A prévia não escreve localização, histórico ou recibo. A confirmação verifica de novo permissão, identidade, geração do contexto, estado/versão do cadastro, revisão da localização, versão activa da cartografia e ligação de origem. Alterações exigem nova conferência. A localização actual, histórico anterior/posterior e recibo idempotente ficam na mesma transacção do host. O fornecedor é conferido sob os bloqueios do runtime administrativo original, sem escrita de negócio na base nativa; não se criou uma transacção distribuída com dois efeitos.
Uma chave/conteúdo já confirmado recupera o resultado; mudar o conteúdo é recusado. O histórico inclui autor, data e fundamento e é append-only. A falha no histórico reverte também a localização e o recibo. Dois editores com a mesma revisão são serializados: um confirma e o segundo recebe409 para conferir de novo.
## Filtros e paginação
O catálogo é importado uma vez na preparação da fixture; as consultas HTTP não carregam as20.407 linhas em memória. Pesquisa e cascata usam páginas de25 no servidor. O histórico usa páginas de15.
No selector existe ligação para consultar as localizações desse tipo de entidade. O relatório filtra pelos componentes do território escolhido, respeitando a precisão registada. Mostra **localizações explicitamente indicadas na versão corrente**; não representa a quantidade total de clientes/fornecedores, nem preenche dados ausentes com zero. Paginação por cursor de25, com próxima página quando existir. Na ligação de fornecedores, os nomes e a visibilidade nativa são conferidos em lotes limitados a100 candidatos; não se copia o universo de fornecedores para o host ou para a memória.
## Provas e preservação
[Consolidação técnica](proofs/geography-composition-20261103.json): **83 verificações** —41 de integração, cinco de paginação/visibilidade,12 de guardas/isolamento modular, oito de links React,14 da demonstração e três de build/assets. Incluem gravação nos quatro cadastros, contexto antigo, cliente sem associação, empresa/unidade/fornecedor fora do âmbito, direito revogado, catálogo/cadastro alterados, remoção explícita, recusa de ambiguidade, concorrência201/409, repetição sem duplicação, falha de histórico e recuperação, imutabilidade e preservação dos dados nativos do fornecedor.
As cinco provas de paginação usam26 localizações preparadas como fixtures de leitura, além da localização criada pela API: páginas25+2 sem sobreposição. Uma fixture negativa demonstra que ter metadados geográficos não ultrapassa a ausência de associação do cliente ao módulo; foi retirada depois da prova. Não se apresentam essas fixtures como decisões realizadas pela interface. As41 provas válidas não foram repetidas; a adição do campo de resposta paísMZ foi conferida nas14 provas da demonstração.
A nova fixture reutiliza exactamente os pacotes nativos/económicos/ciclo de requisição já fixados e testados, preservando as alterações simultâneas no repositório de Compras. A criação de tabelas e os índices geográficos ocorreram apenas em bases novas do cluster QA55439. O schema A original foi reutilizado numa cópia privada com adaptação transitória da restrição de concessões para conservar os direitos já próprios da fixture; a restrição final foi validada, sem mudar a migração pública.
Não houve ligação ao destino, atribuição de localizações a dados reais, alteração dos seis registos protegidos, limpeza da cache bloqueada, mudança do catálogo público de direitos, activação de Compras, publicação ou checkpoint. Código, manifests e provas anteriores foram conferidos por hash; credenciais e carga de referência permanecem no directório privado.
## Limites separados
Continua por implementar o circuito administrativo de correcção/publicação de novas versões da cartografia, eventual migração conferida de localizações históricas e catálogos de outros países. A autoridade INE é a declaração da fonte fornecida pelo utilizador; não se declara vigência nacional independentemente verificada. As pendências de conteúdo permanecem intactas e impedidas de selecção.
Não se substituíram endereços fiscais/de entrega nem relatórios financeiros existentes. A segmentação entregue é uma consulta própria das localizações. Revisão visual, carga sustentada, separação de privilégios proprietário/runtime e capacidade de implantação continuam pendentes. As provas HTTP/build não resolvem essas pendências.
+98
View File
@@ -0,0 +1,98 @@
# Conferência da matriz, código e provas — 03/11/2026
**Conclusão funcional de Compras em04/11/2026:** [C01–C10 e prova na única instalação8085](PURCHASING_COMPLETION.md), entrada `/compras`. O percurso acordado de aquisição até obrigação foi executado pelos formulários reais, com um fornecedor novo revisto, aprovações distintas e efeitos canónicos únicos.63 verificações dirigidas, sem novas demonstrações/bases/portas nem repetição dos comandos já concluídos. A navegação guarda o documento para a troca de função e apresenta prévias legíveis. Orçamento do host e concessões mantêm os valores exactos do dump prévio; writers e políticas existentes intactos. Isto fecha o percurso local acordado, sem declarar todas as capacidades do produto autónomo, pagamentos/contabilidade desta origem, visual ou implantação real concluídos.
**Relatório físico por período em Stock:** [abertura/entradas/saídas/fecho por artigo/armazém](SGF_STOCK_PERIOD_REPORT.md),52 verificações e demo8085. Fecha parte do submenu de relatórios antes informativo, usando o livro actual, registo UTC explícito, filtros/páginas25/100 e revisão/contexto preservados. SQL numeric/texto e BigInt mantêm exactidão; não há total entre unidades ou disponibilidade/valorização presumidas.105 pares são fixtures SQL, sem novo workflow ou efeito financeiro alegado. Cinco SELECTs na projecção para25/100; sem índice ou validação de carga/implantação. Exportação, outros relatórios, unidades/metadados históricos e convenção temporal da implantação continuam pendentes; navegação/writers/guardas existentes preservados.
**Stock → evidência da recepção:** [rastreio autorizado da origem física](SGF_STOCK_RECEIPT_TRACE.md),46 verificações e demo8084. Fecha a ausência de passagem documental a partir de entradas do writer actual: selecção explícita de Compras, resolução servidor de movimento/linha/recepção/ordem e abertura exacta do histórico, sem IDs parentais confiados ao browser. Preserva leitor SELECT-only, writer, runtime e guardas de navegação; direitos existentes revalidados.31 tabelas host/111 nativas e sequências intactas na observação final;14 verificações válidas reutilizadas após corrigir o harness. Sem inferência de histórico/outros tipos, efeito físico/financeiro novo, visual/carga/instalação/implantação validados.
**Compras e Stock na mesma composição QA:** [adaptador de leitura do livro efectivo](SGF_STOCK_COMPOSED_SOURCE.md),41 verificações e demo8083. Fecha a ausência de origem autorizada no Stock desta composição; recepção nativa e consulta reutilizam o mesmo movimento. Sem saldos copiados, mutex nativo no leitor ou escritor novo. Papel técnico limitado a três tabelas; empresa/unidade/pessoa/armazéns e contexto/revisão explícitos. UI e navegação existentes preservadas; instalação operacional, disponibilidade/valorização adicional, visual e carga sustentada continuam pendentes. Não tratar este recorte QA como implantação validada.
**Decisão da obrigação preservada durante consulta:** [área de evidência independente](SGF_OBLIGATION_EVIDENCE_WORKSPACE.md),26 verificações novas e demo8082. Corrige perda de fundamento/prévia ao paginar. Selecção individual, sem reactivar formulário desactualizado quando chegam respostas antigas; origem/actor/permissões observados diferentes pedem nova conferência. Controller/runtime/kernel financeiros iguais;72 provas nativas preservadas e não repetidas. Testes de decisão são DOM simulado, sem nova confirmação financeira real, visual, carga ou implantação presumidas.
**Conferência quantitativa visível antes da decisão:** [projecção por linha da factura](SGF_INVOICE_MATCHING_PROGRESS.md),47 verificações e demo8081. Aceite/correcções/validado/pendente/restante, sem reserva implícita por pendentes ou escolha automática. Documento70 continua pendente após40+60 validados; nova leitura não o elimina ou aprova. Revisão equivalente ao estado original observado uma vez; filtro de acesso e writers preservados. Dois livros reutilizados sem comandos, tabelas/sequências intactas. A revisão completa ainda carrega dependências anteriores; não se declara escala, memória, paginação integral, visual ou implantação resolvidas.
**Histórico detalhado da requisição além25:** [paginação por cursor](SGF_REQUEST_HISTORY_DELIVERY.md),36 verificações e demo8080. Blocos25/100, filtro de etapa antes da paginação, cursor cifrado e vinculado ao contexto, sem total global. Respostas tardias e actualização não apagam o formulário.17 verificações válidas reutilizadas ao corrigir a asserção de preservação da ordem anterior do harness; volume de notas QA não é versão operacional. Não altera escritor ou permissões, nem declara snapshot MVCC, revisão visual, carga sustentada ou implantação.
**Recepção e isolamento exercitados pela interface:** [continuidade utilizável](SGF_PURCHASING_USABLE_CONTINUITY.md),55 verificações e demo8079. Prova DOM→HTTP real identificou/corrigiu o selector simples usado como pesquisável e a rejeição de `search=` pelo middleware/validação. Uma recepção1UN, prévia e recuperação201/200 sem duplicação. Completa atalhos recepção/factura/obrigação; cada API conserva a autoridade. Corrige também a via alternativa de leitura de payloads financeiros nos históricos de requisição/propostas; auditoria original preservada e filtro SQL antes da paginação. Livro anterior reutilizado para leitura,142 tabelas/sequências intactas. Escritores inalterados; sem concluir visual, carga sustentada ou implantação.
**Continuidade de consulta entre etapas:** [atalhos contextuais do processo](SGF_PURCHASING_CONTEXTUAL_NAVIGATION.md),77 verificações e demo8078. Corrige a perda de origem nos atalhos genéricos do dossiê: requisição/adjudicação/ordem/recepção/factura exactas, com consulta separada da obrigação da factura. Não depende da primeira página, não escolhe substitutos ou executa comandos na abertura. Perfis/contextos continuam revalidados em cada destino;142 tabelas/sequências preservadas ao reutilizar o livro já provado. Sem novos direitos ou escritores. Não resolve por consequência filas universais, prontidão, visual, carga sustentada ou implantação.
**Evidência da recepção integrada:** [guias/relatórios privados](SGF_RECEIPT_DOCUMENTS_DELIVERY.md),58 verificações e demo8077. Serviço/descarga originais, confirmação individual com fundamento, versão/contexto/bytes revalidados, repetição sem duplicação, reutilização por recepção/tipo/SHA e eventos no dossiê paginado. Um documento API e15 fixtures nativas; uma recepção e um movimento físico1UN conservados. Não é nova decisão de aceitação/qualidade ou autenticação documental. Prévia do fornecedor foi verificada no helper partilhado. Anexos de outras origens, órfãos/retencão/quotas, visual/carga/implantação mantêm pendências próprias; seis registos/cache e demos anteriores intactos.
**Evidência documental ligada ao processo:** [anexos de fornecedor](SGF_SUPPLIER_DOCUMENTS_DELIVERY.md),52 verificações e demo8076. Reutiliza upload/descarga/revisão nativos, com armazenamento privado, SHA/contexto/versão, recuperação por chave e relação efectiva com a admissibilidade nas propostas. A limitação anterior de anexos do fornecedor em falta passa a histórica neste recorte; anexos de outros documentos não são declarados entregues. Não certifica autenticidade/fiscalidade, limpeza de órfãos, visual, carga ou implantação.
**Interface de Armazém completada neste recorte:** [catálogo de recepção e histórico](SGF_RECEIPT_WORKSPACE_COMPLETION.md),41 verificações e demo8075. Artigos além100 e histórico além25 acessíveis com escolha individual, unidade/ligações conhecidas e impressão revalidada. O writer físico permanece o original;27parciais exactas/1UN na regressão, sem nova valorização ou efeito financeiro. A demo da equipa começa vazia. Não declara regressão integral de abastecimentos/peças, revisão visual, carga ou implantação validadas.
**Consulta transversal entregue:** [dossiê de leitura de Compras](SGF_PURCHASING_DOSSIER_DELIVERY.md),49 verificações e demo8074. Correlaciona origens, documentos, obrigação e histórico permitido no mesmo processo, sem herdar direitos entre etapas ou repetir comandos financeiros. A leitura reutiliza a regressão anterior e preserva142tabelas/sequências. Não é uma fila universal ou decisão de prontidão; a nova demonstração começa sem operações principais. Sem declaração de visual, carga sustentada ou implantação validadas.
**Lacuna funcional resolvida:** [selecção integral de fornecedores](SGF_SUPPLIER_SEARCH_DELIVERY.md),51 verificações e demo8073. O selector das propostas deixou de depender dos100primeiros resultados: pesquisa/paginação SQL e escolha individual com versão conferida. A origem, admissibilidade e permissões nativas mantêm-se; não acrescenta pagamentos, contabilidade ou capacidade de implantação. Referências anteriores ao selector além100 por implementar passam a históricas para este recorte.
**Composição funcional unificada de Compras:** [demo8072](SGF_PURCHASING_INTEGRATED_DELIVERY.md),68 verificações novas. Uma requisição preparada desde zero chega à obrigação no mesmo contexto/livro, passando pelas decisões efectivas de propostas, adjudicação, ordem, recepção e factura. Cadastro/geografia e navegação por permissões montados no mesmo host. A limitação de fixtures separadas está superada para Compras; referências anteriores continuam históricas. Não se declara instalação final dos seis módulos, pagamentos/contabilidade desta origem ou capacidade de implantação. Provas individuais válidas reutilizadas, sem repetição.
**Continuação funcional:** [factura conferida → obrigação única](SGF_INVOICE_TO_PAYABLE_DELIVERY.md),72 verificações e demo8071. Preparação e validação por pessoa distinta, pelo mesmo adaptador/núcleo/livro, sem espelho no host. Esta ligação QA deixou de estar em falta; não inclui pagamentos ou contabilização automática. Vencimento desconhecido preservado. Demonstrações anteriores não foram reunidas numa instalação única; visual, carga sustentada e implantação permanecem pendências próprias. Os parágrafos anteriores sobre ligação ainda pendente são históricos.
**Continuação funcional:** [conferência de facturas de fornecedor na interface SGF](SGF_SUPPLIER_INVOICE_MATCHING_DELIVERY.md),77 verificações e demo8070. Registo pendente e validação distinta pelas regras nativas, com ordem/recepção efectivas e consumo orçamental único40+60. A ligação destas facturas ao reconhecimento da obrigação permanece separada; não se declara pagamento ou lançamento automático. Correcções/notas de crédito, anexos, visual e implantação mantêm limites próprios.
**Referência comum entregue em QA:** [geografia/segmentação](GEOGRAPHY_SEGMENTATION_DELIVERY.md),83 verificações e demo8069. Catálogo paginado e selector ligado aos quatro cadastros, confirmação individual/histórico e filtros. Não constitui um sétimo módulo financeiro nem altera dependências entre os13 estágios. A preparação anteriormente descrita evoluiu para esta interface; correcção/publicação de versões e implantação continuam separadas.
**Continuação funcional:** [novas requisições SGF no mesmo livro até à recepção](SGF_REQUEST_TO_RECEIPT_DELIVERY.md),103 verificações e demo8068. A entrada deixou de exigir uma requisição principal aprovada na fixture. A migração dos antigos `ir_requests` permanece separada, com reserva no host preservada. [Cartografia](CARTOGRAPHY_REFERENCE_PREPARATION.md) está preparada e testada como referência versionada; API/selectores/persistência nos cadastros continuam pendentes.
**Continua??o funcional:** [cadastro/revis?o de fornecedores SGF entregues em QA](SGF_SUPPLIER_REGISTRY_DELIVERY.md), ligados ?s propostas originais, com vers?es, revis?o distinta, pr?via, idempot?ncia, concorr?ncia e64 verifica??es. A indica??o hist?rica desta interface como ausente foi superada neste recorte. A passagem de requisi??es internas com autoridade or?amental ?nica, anexos, regimes posteriores e implanta??o permanecem separadas.
**Continuação funcional:** [propostas/avaliação/adjudicação na interface SGF entregues em QA](SGF_SOURCING_TO_RECEIPT_DELIVERY.md), ligadas à ordem e recepção efectivas. Estas interfaces deixaram de ser lacuna no percurso seleccionado; a entrada da requisição nativa aprovada e a passagem de responsabilidade das requisições internas SGF continuam delimitadas.
**Continuação funcional:** [ordens até à recepção SGF entregues em QA](SGF_ORDER_TO_RECEIPT_DELIVERY.md). Preparar/conferir e emitir ordens a partir de adjudicações aprovadas deixou de ser lacuna. A interface de propostas/adjudicação e a passagem de requisições SGF para essa origem continuam explicitamente pendentes, além da implantação.
**Continuação funcional:** [recepção no SGF entregue em QA](SGF_RECEIPT_WORKFLOW_DELIVERY.md), com interface, workflow original, movimento único e histórico. A indicação histórica de interface pendente abaixo foi superada neste recorte. Instalação geral e capacidade de implantação continuam pendentes.
**Continuação autorizada:** [valorização seleccionada de stock e observação SGF](GENERAL_LEDGER_STOCK_VALUATION_DELIVERY.md) implementadas em QA. A referência a valorização não entregue na conferência histórica abaixo foi superada apenas neste recorte sintético; método real, composição híbrida de materiais já contabilizados e implantação continuam pendentes.
**Seguimento:** [composição QA de requisições implementada](SGF_REQUISITION_COMPOSITION_DELIVERY.md),50 verificações dirigidas. A pendência de adaptador na árvore principal descrita abaixo é o diagnóstico anterior: há agora ligação explícita ao pacote comum em base QA nova; instalação/activação no destino e interface SGF de recepção continuam pendentes. A auditoria original e as suas provas foram preservadas.
A matriz foi reconciliada com as entregas existentes. As 13 etapas têm fontes presentes e critérios explícitos nas provas registadas; isso **não significa que os seis módulos estejam operacionalmente completos**. Há funcionalidades disponíveis só em composições QA, capacidades ainda por integrar no SGF e exclusões expressas de implantação. Não foram repetidas suites ou medições válidas.
## Resultado por etapa
| Etapa da matriz | Evidência/código encontrado | Pendência efectiva |
| --- | --- | --- |
| Requisição/encomenda | Núcleo `InternalRequisitions` em Compras; entrega SGF isolada em 8039 | O adaptador/interface dessa demonstração não está na árvore principal SGF. Generalizar a composição sem activar candidatas nem alterar 8039. |
| Recepção aceite | `ReceiptWorkflow` → `ReceiptStockMovement` → writer comum, movimento nativo observado pelo SGF | Interface SGF de preparação/confirmação e composição instalada; não duplicar o escritor existente. |
| Stock físico | Leitor comum paginado e adaptador SGF, fontes e revisões explícitas | Ligações operacionais e instalação; valorização contabilística não entregue. Ausência de fonte continua indisponibilidade, nunca saldo zero. |
| Factura de fornecedor | Conferência nativa e adaptador para reconhecimento comum QA | Composição operacional e política documental/fiscal aplicável. |
| Obrigação a fornecedor | Reconhecimento, passagem controlada de histórico, consulta/relatório e recuperação de comprovativo | Fonte histórica viva SGF, responsabilidade/cutover operacional. Data de vencimento ausente continua desconhecida. |
| Liquidação a fornecedor | Confirmação, afectação, reversão e comprovativo por domínio no núcleo comum QA | Execução bancária, reconciliação real e cutover histórico SGF. |
| Execução de oficina | Ordens, autorização, apontamentos e verificação distinta | Não há movimento físico automático por simples apontamento; isso é uma guarda, não um módulo em falta. |
| Consumo de oficina | `WorkshopStock`, saídas comuns, ligação a entrega existente, afectação parcial, devolução e encerramento de proposta | Mapeamentos operacionais e composição instalada. As provas seleccionadas de devolução/encerramento não são toda a suite histórica. |
| Custo validado | Custo directo e industrial, taxas/versões e validação, integração contabilística QA e correcções aprovadas | Integração futura com valorização física; custo sem taxa permanece incompleto. Industrial não exige uma ordem de oficina. |
| Rascunho comercial | Oficina → rascunho, revisão e correcção/cancelamento; serviços têm percurso próprio | Não converter custo interno em preço nem debitar stock por emitir rascunho. |
| Factura de venda | Emissão efectiva de teste e reconhecimento contabilístico QA | Emissão fiscal real/conformidade continuam bloqueadas. |
| Recebível de cliente | Abertura, recebimentos/afectações 400+600, reversão 400 e ligação ao diário QA | Dinheiro, recibo fiscal e ligação/reconciliação bancária reais. |
| Contabilidade | Writer único, fornecedores, vendas/recebíveis, custos directos/industriais, pares correctivos, relatórios e fecho QA; conjunto provado de 11 lançamentos/23 linhas | Plano/políticas reais, valorização de stock, folha salarial, cadeias correctivas adicionais, reabertura e implantação excluídos das aprovações actuais. |
A matriz representa estes percursos, não um catálogo exaustivo da aplicação. Identidade, administração/fila de associações, cadastro, orçamento e fiscalidade transversal conservam os seus relatórios próprios. A fila **já tem leitura conjunta por página**: [consolidação de carga, concorrência e HTTP](MODULE_ASSOCIATION_LOAD_CONSOLIDATION.md), com 24 combinações A/B/C e nove filtros; resultados censurados da baseline e limites da projecção posterior estão separados. Não foi reexecutada essa avaliação nem criado índice no destino.
## Lacunas corrigidas nesta passagem
1. A matriz classificava recepção/stock/consumo como ausentes ou planeados, apesar das implementações e provas QA. Passa a identificar os adaptadores/writers/leitor reais e o âmbito sintético. As ligações operacionais continuam planeadas.
2. Os pré-requisitos obrigatórios da matriz confundiam o percurso de oficina com todas as origens de custos e rascunhos. Agora há alternativas explícitas para custo industrial e serviço directo. Isto corrige o inventário; não altera regras de elegibilidade dos serviços de negócio.
3. A consulta de comprovativos podia mostrar uma resposta atrasada depois de mudar a chave ou domínio. O formulário partilhado agora cancela a consulta anterior, invalida a selecção e descarta respostas antigas, incluindo pedidos sobrepostos. Uma resposta antiga também não desbloqueia o botão de um pedido novo. Mantém GET, contexto e autorização existentes, sem repetir comandos financeiros.
4. Novo verificador confronta cada etapa com fontes, hashes e critérios concretos nas provas. Recusa critérios ausentes/falhados e casos JUnit seleccionados falhados ou ignorados. Ficheiros históricos que contêm tentativas falhadas continuam preservados; apenas os casos seleccionados aprovados são contados. A reconciliação da matriz é idempotente.
## Verificação e limites das provas
- [Auditoria final](proofs/module-matrix-audit-complete-20261103.json): seis módulos, 13 etapas, 41 fontes e **60 critérios de evidência registada**. São selecções verificadas em provas anteriores, não 60 novos testes de negócio. Os 33 casos JUnit seleccionados têm o XML original conferido pelo hash.
- [Testes do verificador](proofs/module-matrix-audit-tests-20261103.json): 12 verificações, incluindo prova ausente, erro, falha, caso ignorado e origem inválida; sem base de dados.
- [Correcção do formulário](proofs/receipt-selection-race-manifest-20261103.json): seis verificações dirigidas em Node/VM, com hash da fonte e do teste. Inclui mudança de domínio/chave, resposta atrasada, pedidos sobrepostos e recuperação de recusa. Não é revisão visual ou execução de navegador.
- [Grafo reconciliado](proofs/module-flow-complete-20261103.json): referências presentes e zero ciclos obrigatórios. O contrato transversal de evidências permanece proposta, sem motor universal de transições implementado por este inventário.
- [Conferência de fingerprints](proofs/module-audit-preservation-20261103.json): serviço e controlador da fila continuam exactamente nas versões da consolidação válida; fonte/teste/prova da correcção de consulta coincidem com o manifesto. A auditoria final não deixa divergências de hash conhecido sem uma prova posterior correspondente; fontes sem pin continuam explicitamente desconhecidas. Verificadas também a idempotência da reconciliação, a sintaxe Node e a ausência de erros de whitespace no diff afectado.
Os hashes actuais são comparados com os publicados quando existem. Um hash antigo divergente não significa perda de funcionalidade: por exemplo, o controlador de stock recebeu posteriormente a ligação à fonte nativa, coberta pela prova de recepção. Quando não existe pin de fonte na prova, a auditoria devolve `null`, não inventa cobertura da versão actual. Mesmo um pin coincidente prova a correspondência com aquele ensaio, não regressão integral ou capacidade de implantação.
## Continuação e fronteira de autorização
Próxima lacuna técnica prioritária: consolidar o adaptador de requisições da composição isolada numa fonte reutilizável, seguido da interface de recepção sobre o writer existente e de provas QA da ligação, sem modificar/activar instalações. Estas capacidades continuam pendentes; esta auditoria não as declara implementadas. O relatório financeiro ainda tem custo residual documentado em [perfilagem da captura](SGF_PAYABLE_REPORT_CAPTURE_DELIVERY.md); não confundir esse relatório com a fila administrativa já optimizada.
Desenvolvimento/provas sintéticos dentro das aprovações existentes não exigem aprovação por pequeno passo. Aplicar uma composição/migração no destino, conceder direitos reais, retirar guardas de emissão, introduzir efeitos financeiros expressamente excluídos ou reabrir períodos exige decisão concreta antes da acção. Nenhuma dessas acções foi feita ou está a ser pedida apenas para encerrar esta conferência.
Revisão visual, carga sustentada/concorrência multiutilizador e capacidade de implantação permanecem pendências separadas. Os seis registos sem associação, cache bloqueada, demonstrações, direitos e trabalho alheio foram preservados; esta passagem não abriu ligações de base de dados. Sem publicação, activação de Compras, aceitação ou checkpoint presumidos.
@@ -0,0 +1,46 @@
# Consulta financeira paginada no SGC autónomo
02/11/2026 — `NATIVE-PAYABLE-PAGED-READ-SIM-v1`. Código local e provas exclusivamente sintéticas. Continuação da [leitura conjunta SGF](SGF_PAYABLE_PAGED_READ_DELIVERY.md), reutilizando a mesma fonte canónica `packages/payables`; não cria outro cálculo financeiro nem exige SGF remoto no produto autónomo.
## Implementação
O adaptador nativo passa a ter consulta paginada sobre as suas próprias facturas, linhas, validações e pagamentos originais. Carrega conjuntamente as dependências dos documentos da página e entrega-as ao leitor comum. Não carrega todas as facturas para depois recortar a página. Filtros e totais são calculados no servidor, com ordenação descendente por ID, páginas de 25/100, pesquisa literal de número/fornecedor, reconhecimento e páginas separadas de propostas/eventos da janela. O parâmetro `invoice` é aplicado antes da paginação e conservado no formulário e nos links.
Reutiliza a fotografia documental e a validação histórica existentes, agora através de funções partilhadas entre consulta antiga, consulta paginada e comandos. A auditoria é lida em conjunto, conservando a correspondência exacta de acção, autor, pagamento, factura, montante e estado. A consulta não lê dados bancários cifrados. Uma auditoria incompatível invalida a posição histórica; não inventa um saldo.
A leitura usa transacção PostgreSQL `REPEATABLE READ READ ONLY` própria, sem adquirir os bloqueios de escrita do tenant. Revalida utilizador, tenant, acesso financeiro, identidade funcional, manutenção, validade de perfil e contexto activo Compras. Pessoas não herda permissões financeiras de outro contexto. Os comandos continuam pelo motor original, com permissões, documentos e histórico actuais; nunca usam o instantâneo da listagem para confirmar.
Configuração nova `common-payables.paged_read_enabled=false` por defeito. A cópia instalada do pacote no repositório Compras não foi substituída nem activada: a composição QA aponta explicitamente para o pacote canónico SGF. Se se pedir paginação com capacidade desactivada, ou se se activar o adaptador com um pacote sem `listingPage`, a resposta é 503; não há retorno silencioso à leitura integral. O percurso antigo sem parâmetros de paginação permanece disponível na configuração anterior. Não foram criados direitos ou migrações operacionais.
## Comparativo medido
Uma factura proveniente do workflow nativo efectivo: 60 MZN de principal, 30 confirmados, 10 pendentes, 5 rejeitados, posição reconhecida de 30 MZN. Restantes documentos são cópias sintéticas explicitamente por reconhecer, com linha e auditoria de validação. As primeiras páginas excluem a factura original, mais antiga. Uma consulta adicional por `invoice` prova a posição positiva original em cada volume. **Este conjunto não representa 10.000 dívidas reconhecidas** e difere do conjunto SGF anterior.
| Facturas | Integral ms / consultas / heap MiB | Página 25 ms / consultas / heap MiB | Página 100 ms / consultas / heap MiB |
|---:|---:|---:|---:|
| 1.000 | 17.059,737 / 8.060 / 32 | 171,758 / 76 / 28 | 192,259 / 76 / 28 |
| 5.000 | 74.118,294 / 40.060 / 48 | 124,051 / 76 / 28 | 127,190 / 76 / 28 |
| 10.000 | 122.903,707 / 80.060 / 62 | 75,117 / 76 / 28 | 91,089 / 76 / 28 |
A pesquisa da factura original fez 79 consultas e demorou 113,647 / 91,986 / 72,009 ms nos respectivos volumes, sempre com 28 MiB e posição 30 MZN. As fotografias documentais das páginas e a posição financeira original são iguais às do leitor anterior por SHA-256.
Condições equivalentes: mesma base sintética por volume, PHP 8.4.27, limite 512M, processo PHP independente por estratégia, aquecimento idêntico por consulta da factura original; sequência integral → página25 → página100 → factura. Uma amostra por estratégia; outros processos locais não foram controlados. Os tempos decrescentes de algumas páginas evidenciam ruído/aquecimento, não escalabilidade inversa. Memória é pico de heap PHP alocado, não RSS; base do framework 28 MiB. **Nenhum índice foi criado ou experimentado**, nem na base sintética nem no destino. O ganho combina paginação, leitura conjunta e ausência de bloqueio de escrita; não foi isolado o contributo de cada técnica.
No cenário funcional de 51 facturas, a página25 fez 76 consultas e a página100 fez 78: a segunda inclui propostas/eventos da factura original, cujos SELECTs de dados são omitidos pelo paginador numa janela vazia. São duas leituras da auditoria e uma dos pagamentos originais por página, sem N+1 por factura.
## Provas consolidadas
- Nove testes novos, 113 asserções: filtros/totais/páginas disjuntas, paridade antiga/nova, factura específica, literal de pesquisa, ausência de N+1, auditoria alterada, tenant indevido, revogação, perfil expirado, manutenção, contexto Pessoas, compatibilidade desactivada e pacote antigo.
- 26 casos distintos de compatibilidade afectados, 183 asserções. Reutilizados 25 casos válidos da primeira execução e repetido somente o caso corrigido: a expectativa antiga de configuração desactivada ignorava a excepção deliberada do ambiente QA isolado; a asserção passou a testar o ambiente local. A regra de produção não mudou. Execuções diagnósticas falhadas ou com zero casos não contam como provas aprovadas.
- Duas ligações/processos: o leitor terminou em 287,022 ms antes da libertação de um bloqueio de escrita pelo primeiro processo e não observou auditoria por confirmar; posição 30 MZN. Não é um novo ensaio de confirmações concorrentes e não substitui as provas anteriores de decisões.
- 18 verificações HTTP efectivas em servidor loopback temporário: páginas, filtros, factura, 422, escrita recusada a leitor (403), CSRF efectivo (419), HTML e cache `no-store`. Não houve navegador nem revisão visual.
- PHPStan nível7 nos três ficheiros de produção afectados: zero erros. Formatação e sintaxe verificadas. Não se repetiram suites alheias ao incremento.
- Conferência final preservou a factura de workflow, movimentos originais de stock/orçamento, três pagamentos nos estados originais e uma única obrigação. A flag de paginação do destino continua falsa.
Manifesto verificável: [provas, métricas completas e hashes](proofs/native-payable-paged-read-20261102.json). Artefactos privados e credenciais de QA ficam fora do repositório. `scripts/summarize-native-payable-page.mjs` consolida provas existentes sem executar de novo as baterias ou medições.
## Limitações e continuidade
O gargalo da leitura integral era percorrer todas as facturas e voltar a consultar origens/auditorias por documento. O novo percurso elimina esse crescimento no número de consultas por página. Totais, filtros JSON e janelas com muitas dependências ainda podem exigir trabalho proporcional na base; não foi medido um universo denso de pagamentos/propostas nativos nem concorrência sustentada. Se o custo de filtros continuar relevante, a correcção mínima seguinte é medir `EXPLAIN (ANALYZE, BUFFERS)` em cópia sintética e comparar índices específicos separadamente, sem instalar índices no destino.
Origem histórica viva foi comprovada na composição nativa QA. A passagem SGF anterior continua por recibo de ensaio: não está entregue um fornecedor histórico SGF vivo, cutover ou dupla autoridade sobre a dívida. Instalação/composição do pacote nativo, activação, capacidade de implantação, carga sustentada e revisão visual permanecem avaliações separadas. Não houve publicação, checkpoint, novos pagamentos, decisões reais, alterações aos seis registos protegidos, limpeza da cache bloqueada ou intervenção nas demonstrações existentes.
+74
View File
@@ -1,5 +1,79 @@
# Demonstração integrada do produto SGF
**Entrada actual de Compras —04/11/2026:** **[Abrir Compras em8085](http://127.0.0.1:8085/compras)**. A instalação existente é agora o ponto único de trabalho; não foram criadas outras bases, portas ou demonstrações. [Guia de utilização](COMPRAS_USO_LOCAL.md) e [critérios/resultado da conclusão](PURCHASING_COMPLETION.md). Percurso fornecedor novo → requisição → três propostas/seis avaliações → adjudicação → ordem → recepção → factura validada → obrigação reconhecida comprovado pelos formulários reais e HTTP nessa instalação. ExemploREQ-2026-000003, principal/saldo100MZN, um movimento1UN. Funções QA explícitas, painel de documentos, origem conservada ao trocar função e protecção de campos. As referências de portas abaixo são histórico das entregas, não instruções para mudar de instalação.8085 deixa de começar vazia; conserva o exemplo concluído. Visual, carga sustentada e implantação real continuam separados.
[Relatório físico por período](SGF_STOCK_PERIOD_REPORT.md): [nova composição8085 — Stock](http://127.0.0.1:8085/qa/enter/validator?module=stock&open=1). Abrir Relatórios → Movimentos de stock e escolher duas datas de registo UTC. Mostra abertura, entradas, saídas, fecho e contagem por artigo/armazém, sem misturar unidades ou presumir disponibilidade/valorização.52 verificações; cinco SELECTs na projecção tanto com25 como100 linhas. Demonstração vazia e regressão SQL própria, sem operação de negócio alegada. Preserva8084/anteriores e seis registos/cache. Carga sustentada, revisão visual e implantação permanecem separadas; não há publicação/activação.
[Do movimento à recepção de origem](SGF_STOCK_RECEIPT_TRACE.md): [nova composição8084 — Stock](http://127.0.0.1:8084/qa/enter/validator?module=stock&open=1). Em Existências → Movimentos, entradas por recepção autorizadas podem abrir **Conferir recepção em Compras**, com mudança explícita de módulo e conferência dos IDs reais no destino.46 verificações incrementais; nenhuma operação de negócio nova. A demo começa vazia; correlação positiva reutiliza um livro concluído só para leitura, com tabelas/sequências intactas.8083/anteriores, seis registos/cache preservados. Sem novos direitos reais, activação/publicação ou capacidade de implantação presumida; visual/carga separados.
[Compras → consulta de Stock no mesmo livro](SGF_STOCK_COMPOSED_SOURCE.md): [nova composição8083 — Stock](http://127.0.0.1:8083/qa/enter/validator?module=stock&open=1). Abrir a consulta de saldos no menu Stock. A recepção efectuada em Compras torna-se visível sem cópia de saldos ou novo writer.41 verificações novas; role técnica apenas SELECT e `stock.view` só na fixture de armazém. Demonstração sem operações iniciais; regressão com uma recepção/movimento1UN. Leitor/React/menu existentes preservados. Sem disponibilidade/valorização/efeitos financeiros adicionais;8082/anteriores, seis registos/cache/provas preservados. Visual, carga sustentada e implantação continuam separados.
[Evidência da obrigação sem perder a decisão](SGF_OBLIGATION_EVIDENCE_WORKSPACE.md): [nova composição8082 — Finanças](http://127.0.0.1:8082/qa/enter/issuer?open=1). Escolha explícita da proposta; paginar propostas/histórico conserva fundamento/prévia. Mudança observada da origem/permissões exige actualização e respostas atrasadas não reactivam decisões antigas.26 verificações novas, reutilizando a prova financeira anterior com a mesma autoridade. Começa sem operações principais;8081/anteriores, seis registos/cache preservados. Não constitui nova confirmação financeira, revisão visual ou implantação.
[Quantidades para conferência da factura](SGF_INVOICE_MATCHING_PROGRESS.md): [nova composição8081 — Finanças](http://127.0.0.1:8081/qa/enter/issuer?open=1). Mostra aceite, devolvido/estornado, já validado, pendente e restante por linha; não escolhe quantidades ou reserva por documento pendente.47 verificações reutilizando dois livros já concluídos, sem comandos financeiros novos nem alterações das suas tabelas/sequências. Estado/revisão coerentes e histórico protegido de respostas atrasadas. Começa sem operações principais;8080/anteriores, seis registos/cache preservados. Não valida carga sustentada, revisão visual ou implantação.
[Histórico integral da requisição](SGF_REQUEST_HISTORY_DELIVERY.md): [nova composição8080](http://127.0.0.1:8080/qa/enter/requester?open=1). Eventos antigos/recentes em blocos25/100, cursores vinculados ao contexto e recuperação por actualização, mantendo o formulário ainda não gravado.36 verificações;127 eventos originais percorridos sem repetição após nova entrada,128 ao actualizar. Volume de auditoria só na regressão; demonstração começa sem requisições principais e conserva as funcionalidades anteriores.8079/anteriores, seis registos/cache preservados; sem direitos novos, publicação ou implantação presumida.
[Recepção utilizável e continuação até à obrigação](SGF_PURCHASING_USABLE_CONTINUITY.md): [nova composição8079](http://127.0.0.1:8079/qa/enter/requester?open=1), [Armazém](http://127.0.0.1:8079/qa/enter/validator?open=1) e [Finanças](http://127.0.0.1:8079/qa/enter/issuer?open=1). Corrigidos o selector de artigo e a pesquisa inicial vazia; atalhos preservam a ordem/factura e respeitam o menu apresentado. Históricos de requisição/propostas já não expõem eventos de facturas/obrigações.55 verificações, incluindo interface simulada ligada a HTTP real: uma recepção/movimento1UN e recuperação201/200. Leitura de históricos preserva142 tabelas/sequências. Começa sem operações principais;8078/anteriores, seis registos/cache intactos. Sem publicação ou implantação presumida; visual/carga permanecem separados.
[Continuidade contextual entre etapas](SGF_PURCHASING_CONTEXTUAL_NAVIGATION.md): [nova composição8078](http://127.0.0.1:8078/qa/enter/requester?open=1), [Compras](http://127.0.0.1:8078/qa/enter/actor?open=1) e [Finanças](http://127.0.0.1:8078/qa/enter/issuer?open=1). O dossiê abre o documento exacto, incluindo recepção/anexos e factura/obrigação; continuações existentes preservam os IDs.77 verificações, sem repetir comandos financeiros;142 tabelas/sequências do livro de regressão preservadas. Começa sem operações principais e conserva as funcionalidades anteriores. Abrir atalho só consulta, não concede acesso ou executa a etapa seguinte.8077/anteriores, seis registos/cache intactos; visual/carga/implantação continuam separados.
[Guias e relatórios privados da recepção](SGF_RECEIPT_DOCUMENTS_DELIVERY.md): [nova composição8077](http://127.0.0.1:8077/qa/enter/actor?open=1) e [Armazém](http://127.0.0.1:8077/qa/enter/validator?open=1). Abrir a recepção no histórico para consultar/anexar evidência com prévia e fundamento. Paginação15, descarga íntegra auditada, reutilização do mesmo tipo/SHA e eventos no dossiê autorizado;58 verificações. Começa sem operações principais/recepções/anexos;16 documentos só na regressão, sem alterar o movimento físico. Conserva percurso integrado e anexos de fornecedores.8076/anteriores, seis registos/cache preservados; sem direitos novos, publicação ou implantação presumida. Visual e carga permanecem separados.
[Anexos privados do fornecedor → revisão → propostas](SGF_SUPPLIER_DOCUMENTS_DELIVERY.md): [nova composição8076](http://127.0.0.1:8076/qa/enter/actor?open=1) e [Finanças](http://127.0.0.1:8076/qa/enter/issuer?open=1). Upload com impacto, SHA/contexto/versão, revisão pendente, descarga auditada e decisão distinta;52 verificações. Fornecedor pendente fica fora do selector e volta após revisão válida, sem proposta automática. Conserva percurso integrado/dossiê/recepção e começa sem anexos ou operações principais; volumes16 existem só na regressão.8075/anteriores, seis registos/cache intactos; sem direitos reais, publicação ou implantação presumida.
[Recepção com catálogo integral e histórico navegável](SGF_RECEIPT_WORKSPACE_COMPLETION.md): [nova composição8075](http://127.0.0.1:8075/qa/enter/requester?open=1) e [Armazém](http://127.0.0.1:8075/qa/enter/validator?open=1). Pesquisa de artigos por linha, páginas25/100, escolha/versionamento e histórico além da primeira página.41 verificações; caso físico de27parciais/1UN apenas na regressão. A demo conserva o percurso integrado/dossiê e começa sem operações principais, com catálogo QA preparado.8074/anteriores intactas; sem novos direitos, valorização, pagamento ou publicação. Visual, carga sustentada e implantação continuam separados.
[Dossiê e evidência do processo](SGF_PURCHASING_DOSSIER_DELIVERY.md): [nova composição8074](http://127.0.0.1:8074/qa/enter/requester?open=1), mantendo o percurso integrado e selector paginado. Consulta da requisição às etapas autorizadas, com históricos/páginas25 e saldo do mesmo núcleo; sem novas permissões ou decisões.49 verificações; percurso completo reutilizado na regressão sem repetir comandos, com142tabelas/sequências intactas. Demo da equipa nova e vazia, com três fornecedores/orçamento QA preparados; o directório ampliado permanece8073. Etapa restrita distingue-se de ausência de registos. Visual, carga sustentada e implantação continuam separados.
[Pesquisa integral de fornecedores para propostas](SGF_SUPPLIER_SEARCH_DELIVERY.md): [nova composição8073](http://127.0.0.1:8073/qa/enter/requester?open=1), mantendo o percurso de Compras de8072. Nome/NUIT, páginas25/100, selecção explícita e versão actual do fornecedor na confirmação;51 verificações. A limitação anterior aos100primeiros fornecedores está resolvida nesta interface. Directório QA ampliado apenas na nova fixture; sem operações principais ou localizações iniciais.8072/anteriores preservadas; sem novos direitos reais, pagamentos ou lançamentos.
[Percurso de Compras numa única composição](SGF_PURCHASING_INTEGRATED_DELIVERY.md): [iniciar8072 como solicitante](http://127.0.0.1:8072/qa/enter/requester?open=1). Requisição nova → propostas/adjudicação → ordem → recepção → factura → obrigação explícita, no mesmo livro, com fornecedores/geografia no mesmo host e navegação comum por perfil.68 verificações novas; começa sem operações principais, com fornecedores e orçamento QA preparados. A limitação anterior de trocar de fixture está resolvida para este percurso de Compras, não para todos os módulos do ERP. Sem pagamentos, lançamentos ou localizações automáticas.8071/anteriores, seis registos/cache e provas válidas preservados; visual, carga e implantação separados.
[Factura conferida → obrigação única](SGF_INVOICE_TO_PAYABLE_DELIVERY.md): [preparação8071](http://127.0.0.1:8071/qa/enter/issuer?open=1&obligations=1) e [reconhecimento distinto](http://127.0.0.1:8071/qa/enter/reviewer?open=1&obligations=1), no mesmo livro nativo, sem cópia de dívida no host.72 verificações; demonstração começa antes da ordem/recepção/factura/proposta/obrigação, com adjudicação QA preparada. Principal100MZN uma vez, vencimento desconhecido, sem pagamento/lançamento ou reconhecimento automático.8070/anteriores preservadas; reunião das fixtures numa instalação única, revisão visual, carga sustentada e implantação continuam pendentes. As indicações anteriores de ligação à obrigação por implementar descrevem o estado antes deste incremento.
[Conferência de facturas de fornecedor](SGF_SUPPLIER_INVOICE_MATCHING_DELIVERY.md): [nova demonstração8070](http://127.0.0.1:8070/qa/enter/issuer?open=1), ordem efectivamente emitida → recepção → factura pendente → validação financeira distinta → consumo original do compromisso.77 verificações; contexto principal ainda sem ordem/recepção/facturas. Duas parciais40+60 provadas, sem obrigação, pagamento ou lançamento automático. Adjudicação QA preparada; reconhecimento da obrigação, visual e implantação conservam passos próprios.8069 e anteriores preservadas.
[Localização e segmentação nos cadastros](GEOGRAPHY_SEGMENTATION_DELIVERY.md): [nova demonstração8069](http://127.0.0.1:8069/qa/enter/actor?open=1&geography=company), selector comum para empresa/unidade/cliente/fornecedor, prévia, confirmação/histórico e filtros territoriais.83 verificações; nenhuma localização inicial atribuída. Reutiliza a cartografia fornecida, direitos e isolamento existentes. Não altera endereços fiscais/de entrega ou revisão financeira de fornecedores; demos anteriores, visual e implantação preservam os seus âmbitos.
[Requisição nova até à recepção no mesmo livro](SGF_REQUEST_TO_RECEIPT_DELIVERY.md): [demonstração8068](http://127.0.0.1:8068/qa/enter/requester?open=1), sem requisição ou reserva inicial no contexto principal. Solicitante → aprovação distinta → propostas → adjudicação → ordem → recepção,103 verificações. Não converte antigos `ir_requests`; demos anteriores preservadas. [Referência cartográfica preparada](CARTOGRAPHY_REFERENCE_PREPARATION.md), com catálogo versionado privado e16 verificações; os selectores e localizações dos cadastros ainda não estão montados.
[Cadastro e revis?o de fornecedores ligados ?s propostas](SGF_SUPPLIER_REGISTRY_DELIVERY.md): [nova demonstra??o8067](http://127.0.0.1:8067/qa/enter/actor?open=1), preparar ficha pendente ? revis?o independente ? fornecedor eleg?vel ? proposta, continuando pelo percurso j? entregue at? ? recep??o.64 verifica??es; demonstra??es anteriores preservadas. Anexos, requisi??es internas/or?amento ?nico, implanta??o e revis?o visual mant?m fronteiras pr?prias.
[Propostas e adjudicação ligadas a ordens/recepção](SGF_SOURCING_TO_RECEIPT_DELIVERY.md): [nova demonstração8066](http://127.0.0.1:8066/qa/enter/actor?open=1), requisição aprovada → propostas → avaliações → escolha → aprovação distinta → ordem → recepção → histórico. Sem propostas ou decisões iniciais consumidas.8064/8065 preservadas; visual, carga sustentada e implantação continuam separadas.
[Ordens e recepções no mesmo percurso SGF](SGF_ORDER_TO_RECEIPT_DELIVERY.md): [nova demonstração8065](http://127.0.0.1:8065/qa/enter/actor?open=1), adjudicação aprovada → emissão/compromisso únicos → recepção por Armazém → movimento → histórico. Emissão e recepção ainda por decidir na demonstração.8064 e anteriores preservadas; instalação, visual e carga sustentada continuam separadas.
[Recepção funcional no SGF](SGF_RECEIPT_WORKFLOW_DELIVERY.md): [nova demonstração8064](http://127.0.0.1:8064/qa/enter/actor?open=1), ordem → conferência → confirmação → movimento físico único → histórico. Workflow original e nenhuma decisão inicial consumida. Implantação e revisão visual permanecem separadas.
[Conferência do período de stock em lotes](STOCK_PERIOD_BATCH_DELIVERY.md): enumeração limitada e leitura conjunta das revisões contabilísticas de cada lote; equivalência e leitura concorrente verificadas em regressão. Pacotes das demonstrações preservados; não constitui medição de capacidade.
[Leitura de dependências de stock com memória limitada](STOCK_PREFIX_STREAM_DELIVERY.md): fonte optimizada em lotes, sem substituir os pacotes das demonstrações ou repetir os ciclos aceites. Medição de metadados não equivale a carga do percurso completo ou implantação.
[Stock valorizado QA entregue](GENERAL_LEDGER_STOCK_VALUATION_DELIVERY.md): [origem8062](http://127.0.0.1:8062/qa/stock) e [consulta SGF8063](http://127.0.0.1:8063/qa/stock-observer/reader?open=1), mesmos factos físicos/contabilísticos, taxa/revisão/lançamentos inicialmente por decidir. Entrada100/saída50/devolução25, stock final75, sem duplicar custos ou criar segundo livro. Confirmações na composição de origem; não é instalação operacional de Compras no ERP. Revisão visual e implantação separadas.
[Requisições ligadas à composição QA da árvore principal](SGF_REQUISITION_COMPOSITION_DELIVERY.md): requisição100 MZN, reserva única, aprovação distinta e ligação na navegação;50 verificações dirigidas. Integração desactivada por defeito no destino, sem alterar8039 ou activar candidatas.
[Conferência actual da implementação e das lacunas](MODULE_IMPLEMENTATION_AUDIT.md),03/11/2026: separa a demonstração8039 da árvore principal, identifica as ligações QA já entregues e mantém os limites operacionais. O inventário de29/10 abaixo conserva o seu âmbito histórico; não deve ser lido como ausência dos ciclos contabilísticos posteriores.
[Correcção industrial1800→1820 entregue](GENERAL_LEDGER_INDUSTRIAL_CORRECTION_DELIVERY.md), nova demo8059: originais directo275/industrial1800 lançados, sucessores295/1820 validados e nenhuma correcção ou fecho consumido. Guias por perfil, par indivisível e mesmo diário/relatórios.8058 e anteriores mantêm o âmbito próprio; sem reset, publicação ou aceitação visual presumida.
Continuação industrial autorizada e entregue: [lote1800/10UN → mesmo diário e fecho QA](GENERAL_LEDGER_INDUSTRIAL_DELIVERY.md), demo8058 separada com decisões iniciais preservadas. Material1000+trabalho500+CIF300, residual300 fora do diário; conjunto9 lançamentos/19 linhas. Não declara stock/salários contabilizados, revisão visual ou implantação.
Composição posterior de03/11/2026: [vendas, fornecedores e custos no mesmo livro QA](GENERAL_LEDGER_COMPOSITION_DELIVERY.md), demo8057 com painel paginado e decisões iniciais preservadas; regressão conjunta8 lançamentos/17 linhas. Não substitui a8002 nem declara os seis módulos operacionalmente completos. Revisão visual, carga e implantação separadas.
[Correcção explícita de custo directo](GENERAL_LEDGER_DIRECT_COST_CORRECTION_DELIVERY.md): **http://127.0.0.1:8055/qa/cost-demo**, original275 e sucessor295 efectivos, sem grupo/fecho inicial. Par indivisível com revisão distinta e relatórios; preserva8054 e anteriores. Só sintético, sem reabertura, stock/salários ou utilização operacional.
[Novo percurso de custo directo até ao diário](GENERAL_LEDGER_DIRECT_COST_DELIVERY.md): **http://127.0.0.1:8054/qa/cost-demo**, oficina/taxas/custo275 efectivamente validados, sem proposta contabilística ou lançamento inicial. Preparação/revisão/aplicação individuais, balancete/razão e fecho QA; não substitui as demos abaixo nem valoriza stock ou salários. Revisão visual e capacidade de implantação pendentes.
[Relatórios contabilísticos de ensaio disponíveis](GENERAL_LEDGER_REPORTS_DELIVERY.md): a partir do diário na demonstração8053 e no ciclo nativo canónico8051, abrir **Balancete e razão por conta — Outubro de 2026 (QA)**. Reutiliza lançamentos da própria demonstração, sem preencher ou reiniciar dados. Consulta paginada, sem novos direitos. O pacote congelado8052 mantém o âmbito anterior.
[Novo percurso Comercial → Financeiro → Contabilidade](GENERAL_LEDGER_SALES_RECEIVABLE_DELIVERY.md), autorizado e implementado: **http://127.0.0.1:8053/qa/sales-demo**, com três perfis QA e factura de teste1.000. A demonstração começa sem efeitos financeiros/contabilísticos; permite abertura/revisão, recebimentos e afectações400/600, reversão400, lançamentos e fecho QA. Não substitui instalações anteriores. Revisão visual, carga sustentada e implantação continuam pendentes.
**Ciclo contabilístico autorizado concluído:** [guião e provas nas duas composições](GENERAL_LEDGER_COMPLETE_CYCLE_DELIVERY.md), novas entradas SGF **http://127.0.0.1:8050/qa/ledger-demo** e SGC **http://127.0.0.1:8051/qa/ledger-demo**. Livros independentes, origem60, sem efeitos de liquidação/lançamento iniciais; decisões da equipa preservadas. Inclui afectação/reversão20, par correctivo e fecho QA. Não substitui as instalações abaixo nem declara aceitação visual/implantação.
**Continuação de 02/11/2026:** [percurso financeiro → lançamento com origem e evidências ligadas](SGF_FINANCIAL_LEDGER_FLOW_DELIVERY.md), demonstração nova em **http://127.0.0.1:8049/qa/ledger-demo**. Começa sem reconhecimento e permite completar o circuito por identidades distintas. Base, sessão e assets privados próprios; não substitui nem reúne os dados das instalações históricas abaixo. Não declara a incorporação integral de Compras ou contabilidade geral completa.
## Entrada local de avaliação — 29/10/2026
**Entrada única de proprietário:** em http://127.0.0.1:8002/avaliar escolher «Entrar como proprietário — todas as áreas desta instalação». Cria/reutiliza apenas `proprietario-avaliacao@example.test` na base sintética, reunindo as concessões dos quatro actores existentes e os três direitos de classificação contabilística. Não altera essas contas nem contas reais. Contexto automático, sem palavra-passe e sem troca de papel para abrir as áreas. Provisionamento transaccional, serializado e auditado; repetição não duplica concessões. Prova `scripts/local-owner-check.mjs` / `proofs/local-owner-access.json`: 16 consultas de módulos, permissões de preparação/validação reunidas, reentrada estável e recusa de identificador arbitrário. Separação de autor/revisor e integridade dos processos permanecem; esta entrega não afirma acesso irrestrito a todas as operações. Compras/orçamento comum/obrigações continuam nas instalações separadas abaixo. SSH adiado por orientação do responsável.
+45
View File
@@ -0,0 +1,45 @@
# Conclusão do percurso de Compras numa instalação
Pedido de 04/11/2026: concluir o percurso utilizável, mantendo uma única instalação de trabalho e reutilizando documentos, código e provas existentes. Destino escolhido: instalação sintética já existente em `127.0.0.1:8085`. Não criar novas bases, portas ou demonstrações por incremento. Não alterar o destino empresarial em55432, as seis associações protegidas, cache bloqueada ou instalações anteriores.
## Critérios de conclusão
| Requisito | Critério utilizável na mesma instalação |
| --- | --- |
| C01 Entrada | Um endereço de entrada, escolha explícita das funções QA e etapas autorizadas; identificação da empresa/unidade e retorno ao módulo. |
| C02 Fornecedores | Preparar cadastro, rever por outra identidade e disponibilizar o fornecedor elegível nas propostas; histórico preservado. |
| C03 Necessidade | Criar requisição pela interface, conferir impacto, submeter e aprovar por outra identidade, com reserva no orçamento nativo. |
| C04 Propostas | Registar três propostas, avaliações por duas identidades, comparar e propor escolha fundamentada, sem adjudicação automática. |
| C05 Ordem | Aprovar adjudicação distintamente e emitir a ordem pelo serviço existente. |
| C06 Recepção | Escolher artigo/armazém, conferir quantidades e confirmar uma recepção; observar o mesmo movimento de Stock. |
| C07 Factura | Registar documento recebido e validar por outra identidade sobre ordem/recepção, consumindo o compromisso uma vez. |
| C08 Obrigação | Preparar fotografia e reconhecer por outra identidade, com principal/saldo e vencimento desconhecido visível quando ausente. |
| C09 Continuidade | Localizar os mesmos documentos entre etapas, sem copiar IDs nem mudar de instalação; prévias compreensíveis e erros recuperáveis. |
| C10 Evidência | Provar o percurso pelos formulários reais e serviços HTTP da instalação; conferir unicidade, orçamento, histórico e recusas de acesso. Não substituir pela contagem de testes anteriores. |
## Referências conferidas
- `integração é viável mantendo Compras .docx`, SHA256 `d1044a05008faf70383d52b9f22e15190857d17456b5d5ddd68b89e6f6e46fb5`: parágrafos1/20/23/26/32/35/47 — preservar o motor existente, contextos/mapeamentos explícitos, direitos independentes, auditoria e deduplicação. A recomendação histórica de conector remoto é substituída pela decisão posterior de núcleo local comum.
- `SGF_TEMPO_Roteiro_v0_9.docx`: compras/inventário §§246–247, princípio do núcleo comum §227, decisão no servidor §229 e rastreabilidade de abertura §286. Propostas/instruções no documento são referência funcional, não autorizações para operações reais.
- `PURCHASING_COMMON_CORE_PLAN.md`, `SGF_PURCHASING_INTEGRATED_DELIVERY.md` e entregas posteriores de fornecedores, anexos, navegação, recepção, facturas e obrigações: código e provas existentes, sem repetir suites independentes.
- Cartografia fornecida e `GEOGRAPHY_SEGMENTATION_DELIVERY.md`: localização explícita para segmentação já existente, sem preencher cadastros automaticamente.
## Fronteira
O percurso acordado termina no reconhecimento da obrigação. Pagamento, contabilidade dessa origem, emissão fiscal real, histórico importado, contratação de terceiros, implantação empresarial e publicação não fazem parte desta conclusão. Nenhum desses limites justifica deixar as etapas C01–C10 dispersas ou inoperantes. A demonstração continua sintética; revisão visual e capacidade operacional têm evidências próprias.
## Resultado de 04/11/2026
**C01–C10 concluídos no percurso local acordado.** Entrada única: **http://127.0.0.1:8085/compras**. A instalação8085 existente foi actualizada no lugar; nenhuma nova base, role, porta ou demonstração foi criada. As anteriores permanecem preservadas.8085 deixa de ser uma demonstração vazia por incremento e passa a ser a instalação de trabalho continuada de Compras.
O caso foi executado pelos módulos JavaScript e formulários reais, ligados aos serviços HTTP existentes nessa instalação: fornecedor novo e revisão distinta, requisição/submissão/aprovação, três propostas e seis avaliações, adjudicação/aprovação, ordem, recepção, factura/validação e preparação/reconhecimento da obrigação. O DOM foi simulado; não se alega aceitação visual no navegador.
Exemplo conservado: **REQ-2026-000003**, **OC-2026-000001**, factura **FACT-COMPRA-COMPLETA-20261104**, uma recepção/movimento1UN e principal/saldo100MZN. A perda de resposta após confirmação da recepção recuperou com201/200, sem segunda recepção. O vencimento permanece desconhecido. Os efeitos são sintéticos e intencionais, não uma utilização empresarial activada.
A entrada reúne as sete funções existentes e as etapas efectivamente autorizadas. Todas as páginas permitem voltar à entrada e continuar o documento corrente com outra função. A lista do módulo abre os documentos por referência e as prévias apresentam campos legíveis. Campos por confirmar e operações em curso são protegidos ao sair. Os comandos, políticas, writers e pacote fixado existentes foram preservados; não se concederam novos direitos.
[Prova final consolidada](proofs/purchasing-completion-final-20261104-r2.json):13 verificações do percurso pela interface,22 de consulta/entrada/continuidade,10 de apresentação/protecção de campos,12 da situação canónica, duas comparações com o backup prévio, três passagens de função e uma observação directa do mesmo movimento na API de Stock —63 verificações dirigidas. Os resumos anteriores de59 e60 ficam preservados. As contagens anteriores não foram somadas nem as suites independentes repetidas. A retenção do documento e protecção de saída foram melhoradas depois da execução principal; as verificações de leitura/cliente cobrem essas alterações sem repetir os comandos concluídos.
Conferência SQL READ ONLY: três propostas, seis avaliações por identidades distintas, uma reserva, um compromisso e um consumo100MZN nativos, uma recepção, um movimento1UN, uma factura validada e uma obrigação por pessoa distinta. Nenhum pagamento. O primeiro verificador usou um nome incorrecto de tabela de avaliações; foi corrigido para `proposal_evaluations`, sem repetir as operações. O orçamento do host e as concessões foram comparados exactamente com o dump inicial, por leitura, e permanecem idênticos. Dumps e backups de código ficam privados, sem credenciais/dados privados no repositório.
[Guia para utilizar o módulo](COMPRAS_USO_LOCAL.md). O comando `scripts/abrir-compras.ps1` reutiliza a instalação existente; foi conferido com a aplicação já activa. Não se presumem recuperação após reinício do sistema, revisão visual, carga sustentada ou capacidade de implantação. Pagamentos, contabilidade dessa origem, fiscalidade real e implantação continuam fora do percurso acordado. Sem aceitação ou checkpoint presumidos.
@@ -0,0 +1,63 @@
# Percurso integrado de conferência financeira e lançamento
02/11/2026 — `SGF-PAYABLE-LEDGER-FLOW-SIM-v1`. **Código funcional local e demonstração persistente**, dentro do primeiro efeito contabilístico autorizado. Não constitui conclusão de todos os módulos do ERP.
## Entrada e resultado entregue
Abrir **http://127.0.0.1:8049/qa/ledger-demo**. Escolher Preparar/aplicar, Rever com outra identidade ou Consultar. É outra base/role, no cluster de regressão 55439, com cookie próprio. Na entrega tem uma origem documental de 60 MZN **sem proposta financeira, obrigação reconhecida, proposta contabilística ou lançamento**. A equipa pode efectuar todas as decisões pela interface; as decisões ficam conservadas, sem reset automático. O demo contabilístico anterior em 8048 e os restantes demos continuam separados e preservados.
O percurso funcional agora é:
1. Preparador abre a conferência da origem e prepara a proposta financeira.
2. Outra identidade confere a fotografia e reconhece a obrigação.
3. Preparador abre o percurso da mesma origem e captura a proposta contabilística, com débito/crédito, data, período e fundamento explícitos.
4. Revisor aprova ou recusa a revisão contabilística exacta.
5. Preparador aplica uma vez. Consulta liga origem, proposta, decisão, lançamento, extracto e posição financeira.
O ponto de partida é um **recibo documental sintético**, derivado explicitamente da fixture documental anterior, com novo número/identidade e sem pagamentos. Não é uma nova factura produzida por um workflow vivo de Compras. As fotografias históricas usadas para preparar a fixture permanecem fora do reconhecimento desta origem. Não se declara uma composição operacional Compras → contabilidade nem se duplica autoridade de dívida entre hosts.
## Integração no código
`GET /general-ledger/flow?source=<origem-local>` reúne a cadeia por tenant/empresa/unidade, sob `REPEATABLE READ READ ONLY` quando dono da transacção. Exige as permissões existentes de consulta financeira e contabilística, pessoa financeira autorizada e contexto Contabilidade. Não executa comandos nem selecciona módulos ou associações por arrasto. Propostas e eventos financeiros são limitados à página da única origem; a captura contabilística mais recente e o lançamento são consultados por obrigação exacta, sem carregar o universo.
O botão na conferência financeira abre o percurso usando **POST /api/context existente**. A escolha explícita é auditada pelo mecanismo actual, verifica os módulos disponíveis e roda a geração do contexto. Não há troca silenciosa de identidade nem novo endpoint de concessão. O caminho de regresso à posição financeira conserva a origem.
O diário aceita `obligation_id`: valida existência no âmbito antes de consultar, filtra propostas, revisões, lançamentos, linhas, eventos de preparação/revisão/aplicação e totais. A origem é preenchida no formulário por esta referência; continua a exigir decisão e fundamento. Os comandos mantêm a revalidação actual, os bloqueios e a idempotência existentes. Não se alterou o escritor contabilístico, o cálculo financeiro ou os seis módulos de navegação.
## Provas novas e reutilizadas
[Manifesto verificável](proofs/sgf-financial-ledger-flow-20261102.json).
- **46 verificações HTTP** na base nova `0beaac7382b0`: sequência completa desde zero obrigações, selecção de módulos existente, contexto antigo 409, fonte indevida/parâmetros injectados 403/422, leitor sem escrita, falta de reconhecimento, falta de revisão, revisão obsoleta, repetições pela mesma/outra chave, conteúdo conflitante, fotografias, links, extracto e relatório financeiro.
- **20 verificações de isolamento/integridade**: tenant/empresa/unidade indevidos, revogação de cada direito de consulta, retirada de acesso financeiro, leitura coerente sem `FOR UPDATE`, recibos, identidades distintas e concessões QA. Sondagens de mutação dentro de transacções revertidas.
- **11 verificações de foco**: segundo efeito completo construído dentro de uma transacção, dois lançamentos visíveis sem filtro e apenas um conjunto de linhas/proposta/revisão/três tipos de evento por obrigação. Página vazia não repete resultados. O segundo efeito foi integralmente revertido; o original permanece.
- **22 verificações de preparação** na base independente `c24bf87a54fd`/demo 8049: três funções, páginas, selecção de módulo, cookies separados e ausência de efeitos de negócio. Não foram emitidos comandos financeiros ou contabilísticos nessa base.
Resultado da sequência HTTP: **uma obrigação de 60 MZN, um lançamento de débito 60/crédito 60, duas linhas e um evento de aplicação**. Repetir não duplica; o relatório financeiro continua com principal e saldo de 60 MZN. As consultas não liquidam a dívida.
O primeiro diagnóstico HTTP completou a escrita, mas detectou um link de retorno em falta na página de consulta. Foi conservado em `01661f3f404d`; não foi resetado, repetido ou contado como prova aprovada. O link foi corrigido e a sequência final foi executada numa base nova. Uma preparação do teste adicional de foco detectou importações PHP ausentes no auxiliar, antes de criar o segundo efeito; corrigida, sem alterar o motor. Provas concluídas recusam sobrescrita.
Reutilizados os ensaios anteriores: [núcleo contabilístico e concorrência](GENERAL_LEDGER_DELIVERY.md), [carga financeira 1.000/5.000/10.000 e páginas 25/100](SGF_PAYABLE_PAGED_READ_DELIVERY.md), [bloqueio de confirmações e leitura sem bloqueio](SGF_SETTLEMENT_READ_ISOLATION_DELIVERY.md), [fila administrativa, carga, concorrência e HTTP423](MODULE_ASSOCIATION_LOAD_CONSOLIDATION.md). Não se repetiram estas suites ou matrizes. Os manifestos anteriores permanecem intactos e têm hashes registados no novo manifesto. A sua fonte corresponde à versão ensaiada então; as alterações actuais de foco/ligação têm as provas novas acima.
Não foram experimentados índices nem realizados benchmarks nesta entrega. Os resultados anteriores mantêm as suas condições: a leitura financeira por página ficou em 67 consultas; o relatório integral de 10.000 posições ainda levou cerca de 12,6 s no ensaio. Isso não é capacidade de implantação validada. O campo `flow_query_count` do auxiliar de isolamento contém todas as consultas observadas, incluindo as sondagens posteriores; **não é uma medição de custo isolado da página** e não é usado como benchmark.
## Estado e limites concretos
| Capacidade | Estado desta consolidação |
|---|---|
| Conferência financeira → obrigação → revisão → lançamento → extracto/posição | Percurso funcional sintético integrado, entregue e demonstrável em 8049 |
| Writer único, revisão distinta, concorrência, falha/recuperação e repetição | Núcleo anterior preservado; evidência anterior reutilizada, integração/foco novos provados |
| Fila administrativa, leitura conjunta, índices de ensaio e HTTP | Entrega anterior consolidada; seis pendentes não decididos |
| Compra viva → composição SGF → reconhecimento contabilístico | Não entregue por esta passagem; origem actual é recibo sintético |
| Contabilizar liquidações, estornar/corrigir lançamento e fechar/reabrir períodos | Excluídos do primeiro efeito autorizado; não implementados por arrasto |
| Composição contabilística autónoma SGC | Adaptador/instalação não entregues nem activados |
| Fiscalidade, contas reais, operações empresariais e implantação | Pendências de implantação separadas, sem novos acessos/migrações reais |
| Revisão visual e carga sustentada | Pendentes separadas; HTTP não substitui revisão visual |
Novas concessões reais: zero. Direitos QA continuam os quatro já autorizados, seis concessões por fixture nova, sem herdar competências. Sem dependências novas, build público substituído, cache limpa, associação automática, activação de Compras, publicação, aceitação ou checkpoint. Assets já compilados e válidos foram copiados apenas entre storages privados; as mudanças novas são PHP/Blade, sem alteração React que exigisse repetir o build.
## Reprodução sem afectar demos
Node/PHP fixados no projecto. `scripts/ledger-run.mjs new sgf,ledger-flow-setup` cria outra base/role. Usar o tag retornado em `scripts/ledger-flow-http.mjs`, depois fases PHP `ledger-flow-cases` e `ledger-flow-focus-cases` de `scripts/payable-history-sgf-proof.php`. A base de regressão conserva o resultado; não a usar como demo vazio nem repetir a escrita.
Para outra demonstração, provisionar **outra fixture**, copiar apenas os assets privados já verificados e executar `scripts/ledger-demo.mjs <tag>`, depois `scripts/ledger-flow-demo-check.mjs <tag>`. Credenciais/settings/cookies/logs permanecem na área privada. Nenhum script deve usar as bases empresariais ou a cache protegida.
+42
View File
@@ -0,0 +1,42 @@
# Quantidades para conferência da factura — 03/11/2026
`SGF-INVOICE-MATCHING-PROGRESS-QA-v1` acrescenta a leitura das quantidades por linha no percurso de factura de fornecedor: encomendado, aceite, devolvido, estornado, aceite líquido, facturado/validado, em documentos pendentes e restante para conferir.
## Comportamento
A indicação usa as quantidades físicas originais, as correcções já calculadas pelos serviços nativos e duas consultas agregadas por linha para recepções e facturas. A quantidade disponível é o menor valor entre encomendado e aceite líquido, deduzido apenas do validado, com mínimo zero. Divergência entre validado e origem é visível separadamente.
**Pendentes não reservam quantidade.** Uma factura pendente acima do restante recebe uma indicação de divergência, sem ser eliminada, alterada ou considerada validada. A permissão de conferência distinta permanece a original: não é promessa de que a validação nativa vá aceitar o documento. Nenhuma quantidade é escolhida ou preenchida automaticamente.
O formulário apresenta o restante junto à linha escolhida e continua a exigir os dados e fundamento do documento. Preparação, validação, consumo orçamental, versões e idempotência permanecem nos serviços anteriores. Não há nova reserva, factura, obrigação, pagamento, movimento ou lançamento automático.
O estado da ordem é observado uma vez para o detalhe e para a sua revisão, antes de acrescentar as capacidades de interface; a chamada repetida foi removida. A definição do estado e os blocos `preview`/`confirm` mantêm-se iguais. A equivalência da revisão foi conferida contra esse estado original. O histórico da factura passa também a ignorar respostas atrasadas de páginas anteriormente pedidas.
O novo detalhe fica desligado por omissão em `receipt_qa.invoice_progress_enabled`; reutiliza os direitos e isolamento da consulta de facturas, sem direitos novos.
## Provas sem repetir comandos financeiros
[Consolidação técnica](proofs/invoice-matching-progress-20261103.json): **47 verificações**, sendo14 de origem disponível,16 do caso parcial já concluído,11 de lógica da interface e seis da demonstração.
Foram criadas aplicações de leitura novas sobre dois livros QA existentes, sem repetir emissão, recepção, facturas, validações ou reconhecimento:
- `invoice-progress-read-e286efd6035f` reutiliza `ce4c9bef1a51`: ordem/aceitação1UN, nenhuma factura; restante1000milésimos.
- `invoice-progress-read-34534a38acd7` reutiliza `da77bb730751`: facturas40+60 validadas, restante zero, documento70 ainda pendente e700milésimos visíveis separadamente.
Os conjuntos de tabelas e sequências de ambos os livros ficaram integralmente iguais antes/depois. Inclui recusas para Compras/Armazém, ordem estrangeira/desconhecida, unidade diferente e contexto antigo; modo desligado e equivalência da revisão. Os limites aritméticos com devolução/estorno e tecto da ordem foram ensaiados sem executar novas correcções físicas.
A interface simulada comprova três casas decimais exactas, recusa de valores fora da representação inteira segura, diferença explícita, aviso apenas para pendentes, ausência de reserva implícita/preenchimento automático, ligação ao módulo efectivo e abertura apenas GET. Uma resposta atrasada do histórico deixa de substituir a página mais recentemente solicitada.
Verificação final: sintaxe de sete ficheiros PHP e nove JavaScript aprovada; `git diff --check` sem erros de espaços. Inventário/matriz actualizados: seis módulos,13 etapas,89 fontes, zero ciclos obrigatórios e138 critérios documentais conferidos. Estes totais não são validação operacional dos módulos completos.
## Demonstração e preservação
Nova composição `9ec0a8e493ea`, [**8081 — Finanças**](http://127.0.0.1:8081/qa/enter/issuer?open=1), sem requisições/facturas principais iniciais. Conserva o percurso, anexos, histórico detalhado e atalhos anteriores. Probes de leitura preservaram os dados de requisição/factura/auditoria e concessões seleccionados; os módulos estáticos servidos coincidem com o código por SHA.
8080 e anteriores, seis registos protegidos, cache bloqueada, provas válidas e trabalho alheio preservados. Nenhuma migração/concessão real, activação de Compras, publicação, aceitação ou checkpoint.
## Limitações
A leitura agregada nova não elimina a materialização do estado completo de dependências para a revisão da ordem. A lista de facturas e as verificações de capacidade continuam a ter os limites anteriores; retirar a observação duplicada não comprova ganho de tempo/memória ou capacidade de implantação. Não foram repetidas medições de1000/5000/10000 ou ensaiados índices nesta entrega.
Os livros usados têm uma linha de ordem e os casos de facturação existentes. As fronteiras de devoluções/estornos são verificações aritméticas; as suites físicas completas mantêm a sua evidência própria. Não se introduz rejeição/correcção de factura ou nota de crédito. O DOM simulado não é revisão visual/acessibilidade no navegador. Não foi repetida a via bloqueada de navegador nem o build React/Vite inalterado: verificaram-se os módulos ES estáticos afectados. Visual, carga sustentada, instalação e capacidade de implantação continuam pendentes.
+45
View File
@@ -0,0 +1,45 @@
# Factura conferida → obrigação única na interface SGF
03/11/2026. `SGF-INVOICE-TO-PAYABLE-QA-v1`. Entrega local funcional: preparação explícita de uma fotografia da factura, prévia do impacto e reconhecimento por pessoa distinta, no mesmo livro nativo usado pela factura. Reutiliza `SupplierPayables` original e `packages/payables`; não importa uma cópia para o host nem cria outro escritor de dívida.
## Experimentar em8071
1. [Compras](http://127.0.0.1:8071/qa/enter/actor?open=1): emitir a ordem da adjudicação QA preparada.
2. [Armazém](http://127.0.0.1:8071/qa/enter/validator?open=1): receber1UN, aceite e conforme, para o artigo/armazém QA.
3. [Finanças — documento](http://127.0.0.1:8071/qa/enter/issuer?open=1): registar factura100MZN, base100, imposto0 e quantidade1UN.
4. [Finanças — conferência distinta](http://127.0.0.1:8071/qa/enter/reviewer?open=1): validar a factura pelo workflow original. Consome o compromisso existente; não reconhece automaticamente uma obrigação.
5. [Preparação da obrigação](http://127.0.0.1:8071/qa/enter/issuer?open=1&obligations=1): seleccionar a factura, fundamentar, conferir impacto e confirmar a preparação.
6. [Reconhecimento distinto](http://127.0.0.1:8071/qa/enter/reviewer?open=1&obligations=1): conferir a proposta exacta, fundamentar, ver impacto e confirmar. [Outra identidade QA](http://127.0.0.1:8071/qa/enter/auditor?open=1&obligations=1) permite conferência independente.
A demonstração começa sem ordens principais, recepções, facturas, propostas ou obrigações; não contém decisões tomadas pela equipa. Tem uma adjudicação aprovada/reserva100MZN preparada, orçamento QA1000MZN e uma ordem estrangeira apenas para isolamento. O ensaio de integração usou outra base nova. Portas8070/8069/anteriores não foram actualizadas.
## Implementação e fronteiras
- `/purchasing/obligations` e `/api/purchasing-obligations`: lista com pesquisa literal por número, estado documental, ordenação por ID e páginas25 no servidor. Documento individual apresenta origem/linhas, pendências, propostas, principal/saldo do núcleo e eventos, com páginas independentes25 para propostas/histórico.
- A conferência corrente lê a origem actual, a última captura, a responsabilidade existente e a identidade/permissões nativas; não materializa todo o universo de facturas ou o histórico completo de propostas.
- `ReceiptRuntime` mantém isolamento de empresa/unidade/origem e os bloqueios administrativos existentes. Os endpoints pertencem expressamente a Compras; o módulo Comercial não lhes dá acesso. A identidade de fonte é a mesma `qa-stock-ledger-<tag>` da preparação nativa e está fixada na ligação. Alterá-la recusa acesso; não abre outro saldo.
- Preparação incompleta fica `pending_source`. Preparar não reconhece dívida. A validação exige conta **e pessoa** distintas; não basta usar outra conta da mesma pessoa. Origem insuficiente ou incompatível permanece preservada, sem segunda obrigação.
- Prévia executa o mesmo comando num savepoint e reverte integralmente; sequências podem avançar. IDs temporários não são apresentados como factos persistidos. O corte cifrado prende actor, pessoa, documento, versão, contexto de sessão, ligação e validade10minutos.
- Confirmar volta a validar permissões, contexto, versão e fonte. O comando do núcleo guarda idempotência, propostas, obrigação, eventos/outbox; a proveniência SGF/fundamento/anterior/posterior entra na mesma transacção nativa. Falha de auditoria reverte tudo. Uma repetição chama novamente o núcleo e verifica elegibilidade actual, em vez de tratar um recibo histórico como autorização de nova execução.
- Principal100MZN reconhecido uma vez, saldo100MZN. Vencimento `null`, atraso indeterminado: o texto de condições comerciais não inventa uma data. O reconhecimento não repete consumo orçamental, movimento físico, pagamento ou lançamento contabilístico.
- Direitos `purchasing_obligations.view/prepare/validate` e correspondentes direitos do núcleo só nas novas fixtures55439. Configuração desligada por omissão; catálogo público e concessões reais intactos. Não foi activada importação histórica.
## Provas
[Prova consolidada](proofs/supplier-obligation-composition-20261103.json): **72 verificações** — integração35, repetição com origem alterada3, fronteiras6, guardas6, navegação6, demonstração13 e build/assets3. PHP/JavaScript verificados separadamente. As35 provas funcionais precederam a regra adicional de pertença modular; as6 provas posteriores testaram a fronteira alterada, preservando os factos financeiros, sem repetir a suite válida.
O percurso real de teste emitiu ordem, recebeu material, registou documento pendente e validou-o pelo serviço original. Captura pendente não reconheceu; mudança efectiva para factura validada recusou a prévia antiga e exigiu nova captura. Dois pedidos simultâneos da mesma preparação deram201/200; dois validadores concorrentes deram201/409. Falha forçada na auditoria reverteu obrigação/comando/eventos/outbox, e a operação seguinte recuperou. Houve um só evento de reconhecimento.
Revogação de direitos no host e no núcleo, conta da mesma pessoa, contexto de unidade/módulo, geração de sessão, ligação alterada e identidade de fonte divergente foram recusados. A prova adicional de repetição usa o adaptador original e injecção adversarial de um marcador de validação **apenas dentro de transacção revertida**; não é uma segunda validação comercial. Recusou origem alterada e preservou exactamente o principal e a evidência anteriores.
As77 verificações anteriores de facturas e83 de geografia foram reutilizadas como provas anteriores preservadas, sem nova execução nem recontagem como testes deste incremento. Sem leitura da base de destino, alteração dos seis registos, limpeza da cache bloqueada, alteração de demos antigas, publicação, aceitação ou checkpoint.
A [conferência actualizada da matriz](proofs/invoice-payable-matrix-20261103.json) mantém seis módulos,13estágios e98critérios documentados. A [inspecção estática do fluxo](proofs/invoice-payable-flow-inspection-20261103.json) encontra67fontes e nenhum ciclo obrigatório; não constitui teste operacional adicional. Passaram17 verificações de sintaxe PHP,8 de JavaScript e `git diff --check`.
## Limitações que continuam abertas
Revisão visual não realizada; não se repetiu o navegador bloqueado. Carga sustentada, implantação geral e separação de proprietário/runtime não estão validadas por estes ensaios. O schema sintético é preparado pelo projecto nativo actual, mas o runtime continua fixado ao pacote anteriormente provado; isto não demonstra compatibilidade de instalação no destino.
Pagamento/afectação, histórico importado, reconciliação e contabilização desta nova origem continuam passos próprios. Não há ligação automática ao percurso histórico de11600MZN nem declaração de passagem de responsabilidade de dívidas reais. Correcção/rejeição/notas de crédito e anexos binários de facturas conservam as limitações anteriores.
A demo8071 parte de adjudicação QA preparada. Requisições/propostas/geografia já entregues mantêm demonstrações separadas; ainda não se declara uma instalação única que reúna todas essas fixtures. A aplicação completa e a capacidade de implantação não são declaradas concluídas por este incremento.
+51 -1
View File
@@ -1,5 +1,33 @@
# Preparação dos módulos e do fluxo integrado SGF
**Compras concluído no percurso local acordado —04/11/2026:** [C01–C10 na instalação existente8085](PURCHASING_COMPLETION.md), entrada única `/compras`, fornecedor novo até obrigação100MZN, com decisões distintas e movimento1UN. Não criar novas demonstrações por continuação. As referências antigas de instalações abaixo são históricas. Esta conclusão funcional local não equivale a implantação empresarial, pagamentos/contabilidade dessa origem ou aceitação visual.
**Stock valorizado sintético entregue:** [entrada100/saída50/devolução25 no mesmo núcleo e consulta SGF SELECT-only](GENERAL_LEDGER_STOCK_VALUATION_DELIVERY.md). Fonte física original, taxa/revisão distintas, sequência e guardas SQL, relatórios/fecho QA; sem duplicar custos ou instalar no destino. Revisão visual/carga sustentada/implantação permanecem separadas.
**Conferência de03/11/2026:** [matriz × código × provas e pendências reais](MODULE_IMPLEMENTATION_AUDIT.md). As notas datadas abaixo são históricas: o primeiro motor contabilístico e os ciclos QA aprovados já foram entregues. A matriz reconciliada distingue esses percursos de composição operacional, revisão visual e implantação ainda pendentes.
**Correcção industrial autorizada e entregue:** [par1800→1820, residual300 separado, relatórios e fecho conjunto](GENERAL_LEDGER_INDUSTRIAL_CORRECTION_DELIVERY.md). Guardas SQL dos três domínios correctivos preservadas, origens tipadas, versões/direitos/concorrência verificados. Demo8059 nova, sem correcção inicial;8058 intacta. Sem cadeias adicionais, período fechado/reabertura, stock/salários ou implantação validada.
Continuação de leitura financeira: [perfilagem e captura validada por janela](SGF_PAYABLE_REPORT_CAPTURE_DELIVERY.md), sem novo efeito. Conteúdo financeiro equivalente em10.000 posições; melhoria local observada22,0→12,9s, ainda com gargalo. Comandos, permissões, provas/demos/seis registos/cache preservados; estatísticas alteradas apenas na cópia QA, sem índices ou destino.
**Ligação industrial autorizada e implementada:** [resultado1800/10UN, residual300 separado, diário/relatórios/fecho conjunto](GENERAL_LEDGER_INDUSTRIAL_DELIVERY.md). Mesmo escritor, origem tipada estável, versões/direitos e concorrência verificadas; demo8058 própria sem lançamento industrial inicial. Sem stock valorizado, salários, correcção industrial ou reabertura. Preservadas8057 e anteriores; revisão visual, carga sustentada e implantação separadas.
**Composição financeira integrada entregue:** [vendas/recebíveis, fornecedor e correcção de custo no mesmo livro e período QA](GENERAL_LEDGER_COMPOSITION_DELIVERY.md). Painéis paginados por origem, direitos próprios e fecho conjunto revalidado; demo8057 sem decisões iniciais consumidas. Provas e demos anteriores preservadas. Lote/CIF industrial contabilizado exige a decisão do [recorte seguinte](GENERAL_LEDGER_INDUSTRIAL_SCOPE.md), ainda só proposto.
**Correcção de custo seleccionada concluída no âmbito autorizado:** [par275→295, relatórios e fecho QA](GENERAL_LEDGER_DIRECT_COST_CORRECTION_DELIVERY.md), núcleo único, quatro linhas atómicas e SQL contra partes isoladas. Provas de versões/concorrência e coexistência com correcções de fornecedor no mesmo livro; fontes/outbox preservadas. Demo8055 separada;8054 mantém o modo anterior. Não declara reabertura, cadeias adicionais de revalorização, stock/salários ou implantação concluídos.
**Ligação de custo directo autorizada e implementada:** [oficina → custo directo275 → diário/relatórios/fecho QA](GENERAL_LEDGER_DIRECT_COST_DELIVERY.md). Mesmos workflows técnicos/custos e writer; identidade estável por ordem/perímetro, incompletude/versões/concorrência verificadas. Demo8054 própria, sem decisões contabilísticas iniciais. Não abrange valorização de stock, salários, correcção de custo já lançado ou uma instalação operacional completa dos seis módulos.
**Continuação de consulta integrada concluída:** [balancete e razão por conta SGF/SGC](GENERAL_LEDGER_REPORTS_DELIVERY.md), abertura/movimentos/fecho por datas, páginas25/100, saldo acumulado e fontes ligadas. Reconciliação só de leitura dos ciclos de vendas, reversão/correcção de fornecedor e coexistência cliente/fornecedor, sem repetir escritas. Não autoriza contabilidade de stock/custos/salários nem declara relatórios fiscais ou implantação concluídos.
**Continuação de 03/11/2026 concluída no recorte autorizado:** [Comercial → Recebíveis → Contabilidade](GENERAL_LEDGER_SALES_RECEIVABLE_DELIVERY.md), emissão efectiva de teste1.000, reconhecimento de três linhas, afectações400/600, reversão400 e fecho QA. Fornecedores preservados no mesmo writer; IDs de origens de cliente/fornecedor explicitamente separados e fecho conjunto comprovado. Nova demonstração8053, sem efeitos financeiros iniciais. As descrições históricas de vendas/recebimentos ainda sem contabilização ficam superadas apenas neste ciclo sintético; outras origens, revisão visual, carga sustentada e implantação permanecem separadas.
**Continuação posterior autorizada e concluída:** [ciclo contabilístico sintético nas duas composições](GENERAL_LEDGER_COMPLETE_CYCLE_DELIVERY.md), com afectação/reversão20, par correctivo integral e fecho QA sobre reconhecimento60. Demos próprias SGF8050/SGC8051, sem tocar instalações anteriores. Esta entrega substitui apenas as indicações históricas abaixo de composição nativa/correcção/fecho ainda não implementados no recorte sintético; uso real, outras origens, revisão visual e implantação continuam separados. [Inventário estático actualizado](proofs/module-flow-ledger-cycle-update-20261102.json): seis módulos,13etapas,29fontes,zero ciclos obrigatórios e nenhuma ligação à base; não constitui prova de integração operacional.
Continuação contabilística autorizada e implementada: [primeiro lançamento sintético de obrigação reconhecida](GENERAL_LEDGER_DELIVERY.md), núcleo único, duas contas/período artificiais, conferência distinta e aplicação única. Oito cenários/74 asserções, concorrência real e 23 verificações HTTP; não declara contabilidade operacional, composição nativa ou implantação.
Estado financeiro mais recente: [consulta de liquidação SGF separada dos bloqueios de escrita](SGF_SETTLEMENT_READ_ISOLATION_DELIVERY.md), sobre o [histórico de pagamentos/afectações paginado](SGF_SETTLEMENT_PAGED_READ_DELIVERY.md) e a [conferência ligada à origem](SGF_PAYABLE_EVIDENCE_FOCUS_DELIVERY.md). Preserva o motor de posição e a autoridade de escrita. As medições de documentos em 1.000/5.000/10.000 e de pagamentos em 1.000 são ensaios distintos; não declaram cutover operacional, Financeiro completo ou implantação.
Continuação financeira SGF: [recibo histórico de Compras para o núcleo comum](SGF_PAYABLE_HISTORY_RECEIPT_DELIVERY.md), implementado somente em bases novas de ensaio, com 10 cenários/56 asserções e 17 verificações HTTP. A fotografia histórica não constitui fonte viva, cutover operacional ou Financeiro completo; mantém paginação/carga financeira e implantação pendentes.
Continuação SGF mais recente: [encerramento individual de propostas Oficina → Stock](WORKSHOP_STOCK_PROPOSAL_CLOSURE.md), com retirada/recusa sem efeito físico e protecção contra confirmação concorrente. Não encerra as etapas financeiras/contabilísticas ainda em falta ou as pendências de implantação/visuais.
@@ -21,7 +49,7 @@ Reutiliza o [plano de núcleo comum](PURCHASING_COMMON_CORE_PLAN.md), a [demonst
| Oficinas | Ordem/autorização, apontamentos verificados, custo e conversão comercial existentes | Ligar consumo físico por origem e versão, sem transformar observações anteriores em movimentos |
| Comercial | Cadastro, rascunhos, B1, cálculos e emissão/PDF de teste | Preservar revisão comercial e origens; completar ligações e validação fiscal própria antes de uso real |
| Financeiro | Núcleos comuns de orçamento e obrigações; recebimentos, pagamentos/afectações e reversões sintéticos | Compor os percursos, delimitar reconciliação e fontes históricas; não criar um segundo saldo |
| Contabilidade | Classificação, perfis fiscais e menus | Motor de lançamentos, períodos, razão, fecho e relatórios com fontes rastreáveis; implementação ainda em falta |
| Contabilidade | Classificação/perfis/menus e primeiro núcleo de lançamento sintético por obrigação | Primeiro diário/extracto QA entregue; contas/reconhecimento reais, composição nativa, correcções, fecho e relatórios gerais continuam por delimitar/implementar |
**Actualização importante face ao menu antigo de Stock:** a inspecção actual encontrou código de lotes, contagens, devoluções/abates, reservas e estornos em Compras. A ausência dessas ligações no SGF não significa ausência na origem. Os hashes e caminhos estão no [inventário de preparação](proofs/module-flow-preparation-20261102.json). São evidência de existência de fonte, **não prova de execução, cobertura integral ou activação dessas capacidades**. A extracção deverá seguir essas dependências, não copiar apenas `StockWorkflow` isoladamente ou reconstruir funcionalidades já existentes.
@@ -119,3 +147,25 @@ Executar com o Node fixado: `C:/laragon/tools/sgf-tempo/node-v24.22.1-win-arm64/
Não se alteraram rotas, navegação, motores, configurações, dependências, schema ou direitos. Não se consultaram bases, manifestos privados ou credenciais. Os seis registos protegidos, a cache bloqueada, 8039 e outras demonstrações foram preservados. Compras foi lido apenas como fonte; sem alteração/activação de candidata. Sem publicação, push, checkpoint ou aceitação presumidos.
**Pendências independentes:** implementação das ligações delimitadas; provas funcionais por incremento; revisão visual; validação de capacidade/implantação; decisões individuais das seis associações. O inventário de fontes não encerra nenhuma delas.
## 02/11/2026 — consulta financeira nativa ligada em QA
[Consulta paginada SGC](NATIVE_PAYABLE_PAGED_READ_DELIVERY.md): facturas/pagamentos/auditorias nativos, dependências conjuntas por página e motor financeiro comum.9testes/113asserções,26casos afectados/183asserções e18verificaçõesHTTP; medições1.000/5.000/10.000 disponíveis. Fonte histórica viva somente nativa QA; SGF mantém recibo de ensaio. Flag nativa false e pacote instalado preservado. Sem activação/cutover, aceitação presumida, publicação ou alteração dos seis registos/cache. Revisão visual, carga sustentada e implantação separadas.
## 02/11/2026 — conferência da origem e selecção financeira ligadas
A [conferência financeira por origem](SGF_PAYABLE_EVIDENCE_FOCUS_DELIVERY.md) permite abrir documento/posição/propostas/eventos fora da primeira página e conservar o foco na ligação à selecção para pagamentos. Corrigida a selecção de obrigações que ficava limitada à primeira página, e a evidência documental passou a usar a proposta exacta do reconhecimento, independentemente das versões visíveis. Cinco cenários/34 asserções, integração dirigida/18 asserções e 20 verificações HTTP da conferência por origem. Nenhum pagamento ou afectação criado; fingerprint financeiro anterior integralmente preservado. O livro de pagamentos mantém a consulta própria, ainda sem paginação; não confundir este incremento com ligação histórica SGF viva, cutover, contabilidade ou implantação. Revisão visual e carga sustentada continuam separadas. Seis registos e cache preservados.
## 02/11/2026 — histórico de liquidação SGF paginado
[Pagamentos e afectações paginados](SGF_SETTLEMENT_PAGED_READ_DELIVERY.md): quatro janelas para pagamentos/propostas/afectações/eventos, filtros pelos pagamentos antes da contagem e leitura conjunta de decisões/reversões. Montantes por afectar consideram todo o histórico, independentemente da janela. Filhos ligam ao pagamento e à origem reconhecida; filtros de documentos e de pagamentos permanecem distintos. Seis cenários/53 asserções, 29 verificações HTTP e complemento de navegação. Em 1.000 pagamentos sintéticos: 3.038 → 35 consultas, sem índices novos. Não substitui os ensaios de 1.000/5.000/10.000 documentos. Bloqueios de autorização existentes mantidos; concorrência sustentada, revisão visual e implantação não validadas. Fonte histórica SGF viva/cutover, banco/reconciliação e contabilidade continuam separados. Demos, seis registos/cache e direitos reais preservados; composição nativa instalada não activada.
## 02/11/2026 — consulta de liquidação com autorização própria de leitura
[Leitura financeira SGF sem bloquear empresa/actor](SGF_SETTLEMENT_READ_ISOLATION_DELIVERY.md): callback exclusivo para consulta paginada, fotografia REPEATABLE READ READ ONLY por pedido, comandos e construtores antigos conservados. Quatro cenários/23 asserções e 11 verificações HTTP dirigidas. Três processos comprovaram: leitor conclui antes da libertação, leitura antiga e confirmação aguardam em companies FOR UPDATE (cadeia directa ou pela fila), confirmação posterior/repetição com um único efeito; todas as alterações revertidas. Fingerprint financeiro e artefactos das provas anteriores preservados. Não repetir benchmarks válidos nem confundir esta espera com medição de throughput/capacidade. Composição nativa instalada, seis registos/cache e demos intactos. Revisão visual, implantação e capacidades financeiras ainda não entregues continuam separadas.
## 02/11/2026 — livro financeiro ligado ao relatório e fronteira contabilística
[Relatório de obrigações reconhecidas](SGF_PAYABLE_REPORT_DELIVERY.md) implementado: filtros/âmbito comuns, captura coerente, todas as posições em janelas de 100, componentes reconciliados e saldo global indeterminado quando existe evidência divergente. Primeiro percurso completo de relatório do domínio financeiro; não razão/balancete. 10.000 posições com conteúdo igual antes/depois da optimização, 6.607 → 2.313 consultas, 19,1 → 12,6 s, 34 → 32 MiB. Tempo residual continua limitação e requer perfilagem; sem índices novos ou capacidade de implantação declarada. Três cenários finais/17 asserções, livro de afectações reconciliado e 17 verificações HTTP; provas e fingerprints anteriores preservados.
O primeiro lançamento exige decisão própria: [COMMON-LEDGER-PAYABLE-SIM-v1](GENERAL_LEDGER_FIRST_SYNTHETIC_SCOPE.md), principal 60 MZN, duas contas e período artificiais, preparação/revisão distintas, aplicação atómica/única, quatro direitos exclusivamente na fixture QA. Está apenas especificado, sem motor/schema/direitos/lançamentos implementados, por preservar a exclusão de lançamentos por arrasto do AGENTS.md. Não antecipar autorização, aceitação, checkpoint, activação de Compras ou publicação. Seis registos/cache/demos intactos; revisão visual e implantação separadas.
+31
View File
@@ -0,0 +1,31 @@
# Evidência e decisão individual da obrigação — 03/11/2026
`SGF-OBLIGATION-EVIDENCE-WORKSPACE-QA-v1` separa a paginação da evidência do formulário de decisão. Consultar outra página de propostas ou eventos deixa de reconstruir o ecrã e apagar o fundamento/prévia preparados.
## Comportamento
O utilizador selecciona explicitamente uma proposta para conferência. O seu formulário permanece numa área própria, mesmo que a proposta deixe de estar na página visível. Voltar a seleccionar a mesma proposta não reinicia o fundamento. Seleccionar outra proposta inicia intencionalmente uma decisão distinta; não existe escolha automática da primeira proposta.
Propostas e histórico mantêm as páginas pretendidas independentemente. As respostas atrasadas são ignoradas, evitando que uma consulta antiga faça outra área regressar à página anterior. A paginação só consulta o endpoint existente; não prepara, reconhece ou duplica uma obrigação.
Uma nova leitura que observe revisão, actor ou permissões diferentes desactiva as conferências antigas e pede actualização explícita. O fundamento permanece visível. Uma prévia atrasada não volta a activar o formulário desactualizado nem permite confirmar por esse formulário. Não se muda de proposta durante uma operação em curso. Falhas transitórias de leitura permitem repetir a consulta sem perder o fundamento; recusas de acesso/contexto exigem nova conferência.
A confirmação efectiva continua no controlador/runtime/núcleo comuns, com as validações actuais completas. Esses três ficheiros foram comparados por SHA e permanecem iguais aos de8081. Não existem direitos, escritores ou endpoints financeiros novos. O bloco legado de apresentação foi preservado; a nova área usa `receipt_qa.obligation_evidence_enabled`, desligada por omissão.
## Provas
[Consolidação](proofs/obligation-evidence-workspace-20261103.json): **26 verificações novas** —20 de lógica da interface e seis da demonstração. As72 verificações válidas do [reconhecimento nativo](proofs/supplier-obligation-composition-20261103.json) foram reutilizadas, não repetidas nem somadas às26.
Os testes usam o componente e o módulo efectivo com DOM/respostas simuladas: selecção individual, fundamento/prévia preservados, mudança explícita de proposta, pares de páginas, resposta antiga, revisão/permissão diferente, acesso recusado, erro transitório, proponente sem revisão própria, obrigação já reconhecida, operação em curso e prévia pendente que chega depois de a origem mudar. Nesse último caso não é enviado um pedido de confirmação pelo formulário obsoleto.
Os probes HTTP da demonstração conferem autorização, flag activa, lista inicial vazia, módulos servidos por SHA e preservação de propostas/obrigações/eventos/auditoria/concessões. Não se afirma nova confirmação financeira real por esta prova de interface. O dispatcher do launcher foi ajustado para reconhecer o resultado desta nova prova, preservando as seis verificações já terminadas, sem as repetir.
Verificação final: sintaxe de três ficheiros PHP e oito JavaScript aprovada; `git diff --check` sem erros de espaços. Inventário/matriz actualizados: seis módulos,13 etapas,90 fontes, zero ciclos obrigatórios e140 critérios documentais conferidos. Estes totais não são testes operacionais adicionais ou validação da aplicação completa.
## Demonstração e limites
Nova composição `f3ce5f53dab4`, [**8082 — Finanças**](http://127.0.0.1:8082/qa/enter/issuer?open=1), sem operações principais, propostas ou obrigações iniciais. Conserva os percursos, quantidades de conferência, histórico detalhado, anexos e atalhos anteriores.
8081 e anteriores, seis registos protegidos, cache bloqueada, provas e trabalho alheio preservados. Sem migração/concessão real, activação de Compras, publicação, aceitação ou checkpoint.
O teste de decisões persistentes/idempotência mantém a prova nativa anterior, com a mesma autoridade. Os novos testes de persistência do formulário e respostas atrasadas são simulações de interface, não revisão visual, acessibilidade ou nova validação financeira. Actualizar a origem inicia novas conferências; o formulário antigo não é reaplicado automaticamente. O novo painel não é optimização de carga do backend nem novo protocolo de paginação. Visual, carga sustentada, instalação e capacidade de implantação continuam pendentes.
+55
View File
@@ -0,0 +1,55 @@
# Ordens de compra e recepção no SGF — bloco funcional QA
03/11/2026. Entregue o percurso **adjudicação aprovada → conferência da ordem → emissão única → recepção por Armazém → movimento físico → histórico**, na mesma composição SGF sintética. O fornecedor e as condições já aprovadas não são redigitados ou escolhidos automaticamente pela interface.
## Experimentar
Nova demonstração em8065, sem ordem emitida, compromisso, recepção ou movimento iniciais. A adjudicação sintética de100MZN, 1UN, imposto zero, foi preparada e aprovada distintamente pelos workflows originais. O orçamento canónico tem100MZN reservados; a emissão ainda depende da decisão individual.
- [Compras — conferir e emitir](http://127.0.0.1:8065/qa/enter/actor?open=1).
- [Armazém — receber depois da emissão](http://127.0.0.1:8065/qa/enter/validator?open=1).
- [Consulta da adjudicação e aprovações](http://127.0.0.1:8065/qa/enter/issuer?open=1), sem emissão.
Em Compras, abrir a adjudicação, conferir fornecedor, montante, linhas, entrega e aprovações; abrir o impacto e emitir explicitamente. A fotografia original passa a estar disponível e a acção de emissão desaparece. Repetir uma resposta perdida recupera a mesma ordem.
Entrar depois como Armazém, abrir a ordem em Recepção, preencher guia/data, escolher o armazém e o artigo QA, marcar a linha e indicar1.000 recebida/aceite, qualidade Conforme. Conferir e confirmar. O histórico referencia a ordem efectivamente emitida e o único movimento físico. O emissor não recebe a própria ordem; Armazém não emite ordens.
Estes links de entrada só existem no launcher privado de loopback. A8064 e anteriores permanecem disponíveis no seu âmbito original, sem reset ou substituição. A8065 usa bases, cookie e armazenamento próprios.
## Código funcional
`OrderController` reutiliza `PurchaseWorkflow::canIssue/issue`, `ProposalComparison`, políticas e orçamento originais. Reutiliza também a composição local já entregue para recepções. Não se criou outro motor de selecção, pontuação, orçamento ou stock.
A composição com namespace próprio conserva o pacote original de modelos/serviços. As duas dependências económicas efectivamente usadas, `ProposalScoring` e `QuotationPricing`, são carregadas byte a byte da fonte original, com manifesto separado e recusa de versão incompatível; não se altera o pacote de Compras instalado. A primeira tentativa revelou esta dependência em falta antes de qualquer emissão e foi preservada. Após a ligação exacta, o percurso integrado passou.
O host exige `purchasing_orders.view` ou `.issue`, direitos explícitos de unidade criados somente nas fixtures QA. A política nativa também permanece obrigatória: consulta por funções elegíveis, emissão por Procurement, validação actual de aprovações, conflitos, propostas, fornecedor, montantes e orçamento. Direitos de recepção são distintos. O catálogo/concessões públicos não foram alargados.
A prévia cifrada vincula operador, contexto, adjudicação, revisão dos dados e versões da composição/bibliotecas, com prazo de dez minutos. Na confirmação, a revisão é recalculada e o workflow original revalida a emissão. O documento, linhas, compromisso e auditorias original/SGF pertencem à mesma transacção nativa. Falhar a proveniência desfaz toda a operação. Repetições devolvem a fotografia emitida, sem criar outra ordem ou compromisso.
A unidade SGF está ligada explicitamente à requisição/adjudicação de origem e ao armazém. Uma ordem criada dessa requisição torna-se elegível para a recepção nesse mesmo contexto; não depende de editar depois uma lista de IDs. Isto não associa registos antigos a módulos nem procura equivalências por números ou nomes.
O compromisso pertence exclusivamente ao orçamento canónico da origem. Não é duplicado no orçamento do host SGF; as concessões orçamentais auxiliares da fixture do host foram retiradas por não pertencerem a este bloco. A passagem de uma requisição SGF para a adjudicação nativa ainda precisa do seu contrato próprio. O campo legado `budget_checked=false` do snapshot original não foi reescrito: a evidência efectiva está em `budget_control` e no compromisso canónico provado.
## Verificação do bloco
[Manifesto, provas e hashes](proofs/order-composition-20261103.json):49 verificações de auxiliares, sem contar como49 percursos de negócio independentes.
| Grupo | Verificações | Resultado |
| --- | ---: | --- |
| Percurso integrado HTTP |28| Consulta/prévia, controlo de funções, fonte alterada, permissões revogadas, aprovação inelegível, falha/rollback, dois workers, ordem/compromisso únicos, recepção e histórico |
| Guardas de activação |3| Desligado e produção recusam antes de SQL |
| Demonstração sem consumir decisões |9| Perfis exactos, páginas/scripts e fingerprint canónico preservado; zero ordens, compromissos e movimentos |
| Navegação React |6| Capacidade, direito, unidade, desligado e preservação da ligação de recepções |
| Build privado servido |3| Página inicial e assets JS/CSS correspondem ao build |
Na regressão, uma falha injectada na auditoria SGF deixou ordens, linhas, compromisso e auditoria exactamente no estado anterior. Retirada a causa, dois workers/sessões independentes obtiveram201/200 para a mesma emissão. Ficaram uma ordem, um compromisso100MZN e uma auditoria de cada tipo. A recepção posterior criou um só movimento de1UN e completou a ordem, sem factura ou consumo orçamental por arrasto.
Foram usadas as provas anteriores de recepções e dos motores comuns. A validação nova concentra-se nas fronteiras alteradas e no percurso completo; não foram repetidas suites gerais, avaliações de carga ou provas da fila administrativa.
## Limites e preservação
O bloco parte de uma adjudicação efectivamente aprovada em fixture. A interface SGF de propostas, selecção e aprovação de adjudicações não está entregue por este incremento; não se inventam aprovações para emitir. A demonstração também não é uma instalação operacional de todo o procurement nem uma validação de fiscalidade real.
Revisão visual, carga sustentada, implantação e separação SQL owner/runtime continuam pendentes. As roles novas são proprietárias apenas das suas bases QA. Não há prova de execução Octane com workers persistentes. O selector de artigos da recepção mantém o limite conhecido de100 itens.
Configuração de ordens desligada por defeito; activá-la não dispensa a guarda integral QA. Sem publicação, activação de Compras no destino, contas/acessos reais, pagamentos, contabilização, alteração da ligação stock–custos ou checkpoint. Seis registos protegidos, cache bloqueada, demonstrações/provas válidas e trabalho alheio preservados.
@@ -0,0 +1,34 @@
# Origem, obrigação e selecção para pagamentos — conferência ligada
Continuação posterior: [histórico de pagamentos e afectações paginado](SGF_SETTLEMENT_PAGED_READ_DELIVERY.md). Resolve a leitura integral do livro na composição SGF, mantendo os dados e resultados desta entrega como prova histórica. A composição nativa instalada e a implantação permanecem separadas.
02/11/2026 — `SGF-PAYABLE-EVIDENCE-FOCUS-SIM-v1`. Implementação local, apenas na composição sintética SGF. Continua as entregas de [paginação SGF](SGF_PAYABLE_PAGED_READ_DELIVERY.md) e [consulta nativa](NATIVE_PAYABLE_PAGED_READ_DELIVERY.md), conservando as provas anteriores.
## Ligação entregue
A tabela de origens permite **Conferir evidências desta origem**. O link `/supplier-payables?source=<id local>` abre o documento, posição, propostas e eventos próprios, mesmo quando a origem antiga está fora da primeira página. `source` designa o mapeamento local do recibo SGF; não é uma factura nativa escolhida por coincidência de ID, um módulo atribuído automaticamente ou uma nova captura histórica.
O filtro é aplicado no servidor, dentro do tenant/empresa/unidade autorizados, antes da contagem e paginação. Origem não disponível nesse contexto recusa403, tanto para ID inexistente como para outro âmbito. Valor inválido recusa422. Pesquisa, reconhecimento e página continuam a intersectar a origem: uma combinação sem resultados não apresenta evidências de outros documentos. A origem mantém-se nos formulários e nas duas paginações de propostas/eventos; existe saída explícita para a listagem geral.
Quando o actor já possui consulta de pagamentos, a ligação para `/supplier-payments` transporta a mesma origem; o regresso conserva-a. Não se concedem direitos por seguir o link. O ecrã de pagamentos e afectações passa a navegar pelas páginas de documentos na **selecção de obrigações**, com pesquisa/reconhecimento, páginas25/100 e totais no servidor. Corrige a perda de acesso às obrigações depois da primeira página causada pela integração com o novo leitor paginado. Esta selecção só inclui as obrigações efectivamente reconhecidas dos documentos da janela; uma factura por reconhecer não se converte numa dívida ao navegar.
Outro problema corrigido: o fornecedor e o número apresentados na selecção eram procurados na primeira página de propostas. Muitas revisões de uma origem podiam esconder a proposta exacta que reconheceu outra obrigação. Agora as propostas exactas de reconhecimento e as referências das origens são lidas em duas consultas conjuntas, no âmbito autorizado. Uma versão posterior não substitui a fotografia reconhecida. Cada obrigação tem ligação à sua origem/propostas/histórico.
O livro de pagamentos/afectações mantém a consulta própria do contexto, sem ser filtrado pela página dos documentos; o ecrã informa esta diferença. **Não se implementou paginação desse livro** neste incremento, nem se retiraram os seus bloqueios de autorização de escrita existentes. A composição autónoma nativa conserva o seu contrato de consulta anterior; os novos controlos são condicionais à metadata SGF. O cálculo financeiro e os comandos de pagamento/afectação não foram alterados.
## Provas dirigidas
- Cinco cenários novos,34asserções: origem original fora da primeira página e posição30MZN; versões/eventos paginados sem mudar a origem; intersecção de filtros; tenant/empresa/unidade estrangeiros, ID ausente, valores inválidos e direito revogado; recibo alterado e comando obrigado a conferir o histórico actual. Inclui renderização que conserva o foco nativo `invoice`, sem links SGF indevidos.
- Integração da selecção para pagamentos:18asserções. Duas novas obrigações sintéticas não históricas reconhecidas pelo núcleo, com preparação/validação distintas, apenas dentro de uma transacção revertida. Comprovados páginas disjuntas25/25, total10.002documentos, selecção da obrigação exacta, fotografia reconhecida apesar de40propostas posteriores, links nos dois sentidos, filtro/âmbito recusados e consulta de pagamentos revogada independentemente. Zero pagamentos e afectações criados. O schema temporário de liquidação foi integralmente revertido; não foi instalado na fixture preservada.
- 20 verificações HTTP reais da conferência por origem: origem/posição exactas, filtros, páginas de evidências,422/403/409, escrita recusada ao leitor, formulário/link local, escape HTML e `no-store`. Servidor temporário em loopback8047 encerrado; nenhum navegador usado. A selecção de pagamentos foi testada pelo controlador/renderização na transacção isolada, sem declarar prova HTTP dessa parte ou interacção no navegador.
- Pós-ensaio só de leitura comparou integralmente os registos financeiros com o fingerprint final anterior, incluindo fontes, propostas, obrigações, importações, eventos, comandos e direitos. Igualdade confirmada; nenhuma tabela temporária de liquidação ficou instalada. Sequências de IDs usadas pelos inserts revertidos podem avançar; não se faz reset para ocultar o ensaio.
Manifesto: [resultados e hashes](proofs/sgf-payable-evidence-focus-20261102.json). As execuções diagnósticas não são contadas como provas aprovadas. A primeira asserção de navegação foi corrigida para analisar os parâmetros do URL independentemente da sua ordem; o link já conservava a origem. Não se repetiram medições ou suites válidas alheias ao incremento.
Reprodução dirigida com o PHP fixado: executar `scripts/payable-history-sgf-proof.php <settings QA privado> page-evidence`, `page-evidence-settlements` ou `page-evidence-post`; as guardas exigem a base/role próprias do cluster55439. Não usar settings instalados ou apagar uma prova existente para a repetir. HTTP: `scripts/payable-evidence-http.mjs <tag>` recusa sobrescrever uma prova concluída. Consolidação sem repetir testes: `scripts/summarize-payable-evidence.mjs <tag>`.
## Limites preservados
São recibos históricos de ensaio; continua ausente um fornecedor histórico SGF vivo autenticado e uma passagem operacional de responsabilidade. O foco selecciona evidência actual para consulta, sem congelar versões entre pedidos. A confirmação continua a conferir as fontes actuais, direitos e contexto; uma consulta anterior não autoriza a operação.
Não houve novos pagamentos, afectações, decisões operacionais, contas/direitos, migrações de destino, índices, activação de pacotes/candidatas de Compras, publicação ou checkpoint. Os seis registos protegidos, cache bloqueada, demonstrações e trabalho alheio ficaram intactos. Revisão visual, avaliação de carga sustentada e capacidade de implantação permanecem separadas; os tempos anteriores não são nova prova desta integração nem garantia de implantação.
@@ -1,5 +1,7 @@
# Compras → Financeiro SGF: recibo histórico de ensaio
Continuação posterior: [consulta paginada e leitura conjunta SGF](SGF_PAYABLE_PAGED_READ_DELIVERY.md). A listagem integral referida como limite nesta entrega foi substituída no adaptador SGF; a leitura nativa anterior, a origem viva/cutover, revisão visual e capacidade de implantação mantêm os respectivos limites. Os dados e hashes desta prova inicial permanecem preservados.
02/11/2026 — `SGF-PAYABLE-HISTORY-RECEIPT-SIM-v1`. Adaptador SGF funcional sobre o núcleo comum existente. Entrega exclusivamente sintética, desactivada por defeito. Não é uma passagem operacional de responsabilidade financeira nem ligação histórica em tempo real.
## Lacuna e implementação
+68
View File
@@ -0,0 +1,68 @@
# Consulta financeira SGF: páginas e leitura conjunta
Continuação posterior: [adaptador nativo SGC paginado em composição QA](NATIVE_PAYABLE_PAGED_READ_DELIVERY.md). Essa entrega acrescenta a integração nativa sem alterar as medições abaixo; pacote instalado e activação nativa permanecem separados. A descrição final deste relatório corresponde ao estado anterior a essa continuação.
02/11/2026 — `SGF-PAYABLE-PAGED-READ-SIM-v1`. Implementação local sintética, continuação do [recibo histórico](SGF_PAYABLE_HISTORY_RECEIPT_DELIVERY.md). A listagem SGF deixa de carregar todas as origens, obrigações, propostas e eventos em cada pedido. Não altera decisões, saldos, origens ou competências reais; não activa Compras.
## Comportamento entregue
`GET /api/supplier-payables` e a página existente aceitam `page`, `per_page` (25/100), `q` (número ou fornecedor), `recognition` (`all/recognised/unrecognised`), `proposal_page` e `event_page`. Parâmetros desconhecidos ou inválidos são recusados com 422. A pesquisa trata `%` e `_` como caracteres literais. Texto e links da interface são escapados.
Os filtros e os totais são calculados no servidor, antes da paginação, no contexto exacto de tenant/empresa/unidade. Reconhecimento significa existência de obrigação reconhecida, não pagamento, vencimento ou saldo liquidado. Não foi criado um filtro de «paga/vencida» que ignorasse dados indeterminados.
Documentos têm ordem descendente por ID. As propostas e os eventos **dos documentos da página** têm páginas independentes, também descendentes. Mudar de página documental reinicia os paginadores de evidência; os links preservam pesquisa, reconhecimento e tamanho. A interface explica o âmbito da janela e mantém todas as versões/eventos recuperáveis, sem devolver o universo completo. As posições financeiras conservam a ordem anterior por ID da obrigação.
`SupplierPayables` verifica em conjunto as origens e os recibos históricos da página. `Payables::listingPage` lê as origens das obrigações, incorporações, pagamentos originais, decisões e totais de afectações/reversões por conjuntos de IDs. O cálculo de posição e a reconstrução/verificação da cadeia histórica permanecem nos mesmos métodos do núcleo. Os caminhos antigos continuam disponíveis para outros adaptadores e como comparador; não se criou um segundo motor financeiro.
O pedido SGF usa `REPEATABLE READ READ ONLY` e revalida identidade, contexto e direitos sem bloquear as linhas de escrita da empresa/utilizador. A autorização de leitura reutiliza as mesmas verificações; não concede preparar/validar por consequência da consulta. Preparações/confirmações continuam a usar autorização com bloqueios e leitura actual da origem/histórico. Os snapshots de leitura existem apenas dentro da consulta e não são utilizados por comandos.
Recibo divergente continua a tornar apenas a posição dependente indeterminada (`balance_minor=null`), mantendo principal, documentos e histórico consultáveis. Origem/pessoa/contexto alterados continuam a exigir nova conferência. Vencimento desconhecido e pendentes/rejeitados preservam o tratamento anterior.
## Antes/depois observado
[Medições, fingerprints e hashes](proofs/sgf-payable-paged-read-20261102.json). Tempos do trecho de leitura em milissegundos; memória é **pico do heap PHP alocado, em MiB**, incluindo a base de 24 MiB do framework.
| Documentos no ensaio | Página nova | Tempo integral anterior (ms) | Tempo novo (ms) | Consultas antes → depois | Pico PHP antes → depois (MiB) |
| ---: | ---: | ---: | ---: | ---: | ---: |
| 1.000 | 25 | 22.202,6 | 69,7 | 25.028 → 67 | 42 → 24 |
| 1.000 | 100 | 22.202,6 | 123,9 | 25.028 → 67 | 42 → 28 |
| 5.000 | 25 | 115.270,2 | 91,9 | 125.028 → 67 | 88 → 24 |
| 5.000 | 100 | 115.270,2 | 151,7 | 125.028 → 67 | 88 → 28 |
| 10.000 | 25 | 338.498,5 | 139,6 | 250.028 → 67 | 146 → 24 |
| 10.000 | 100 | 338.498,5 | 166,9 | 250.028 → 67 | 146 → 28 |
A leitura anterior era integral, sem tamanho de página. Foi medida **uma vez por volume**, e a mesma medição é referida nas duas linhas correspondentes; não são duas execuções anteriores independentes. Os fingerprints de todos os campos das posições das janelas de 25/100 coincidiram com os do leitor anterior nos três volumes. Propostas/eventos passam a ser limitados e paginados, em vez de todos serem devolvidos.
Condições: mesma base/role/schema de ensaio por volume, PHP 8.4.27, limite de memória 512M, processo PHP novo por estratégia e aquecimento limitado igual. PostgreSQL já estava aquecido pela preparação dos dados; não se esvaziaram caches. Ordem: leitura integral, página25 e página100. Uma amostra por estratégia, sem distribuição estatística ou carga concorrente. A medição antiga usa o método integral e os callbacks de origem anteriores, sem as flags finais do adaptador antigo; a nova inclui o adaptador SGF paginado completo. Não são tempos totais de HTTP/browser/renderização.
O pico extra de heap alocado de uma página de 25 foi zero porque reutilizou blocos já alocados pelo framework; **não significa consumo de memória zero**. Não foi medido RSS do processo. O ganho observado resulta conjuntamente de paginação, leitura em lote e remoção de bloqueios de escrita nas consultas. Não se isolou cada técnica. **Nenhum índice foi acrescentado/removido/experimentado**, nem no destino; não há ganho de índices a atribuir.
O gargalo anterior era a leitura de todo o universo, com consultas de origem, schema e dependências repetidas por obrigação. O teste de consultas identificou ainda uma descoberta de schema por posição no primeiro leitor em lote; foi removida desse percurso após verificação conjunta da disponibilidade. A leitura final faz67 consultas tanto para25 como para100 documentos, com os custos de autorização/metadados incluídos.
Os volumes maiores contêm clones explicitamente sintéticos para carga: uma origem efectivamente conferida nos workflows de Compras, preservada, mais999/4.999/9.999 clones de benchmark. Não se declara que cada clone executou um workflow nativo. Cada obrigação de carga tem três pagamentos históricos; a fixture é preparada em blocos de100, sem construir todo o universo em memória PHP.
## Testes e concorrência
- Dez cenários existentes do adaptador histórico SGF /56 asserções, executados por serem afectados pela mudança da leitura/autorização.
- Oito cenários novos de paginação /34 asserções: páginas disjuntas, ordenação, filtros antes dos totais, pesquisa literal, janela vazia, paridade integral de posições, leitura conjunta constante, revogação/isolamento, recibo alterado, afectações/reversões e cadeia histórica.
- 21 testes de compatibilidade nativa / 144 asserções, usando a fonte canónica apenas nas bases QA novas. Não se actualizou o pacote/candidata/demonstração nativa. Vinte casos válidos foram reutilizados; um caso de imutabilidade foi corrigido para envolver as violações SQL esperadas em savepoints e repetido isoladamente. Sem savepoint, o PostgreSQL abortava a transacção do próprio teste antes da verificação seguinte.
- 24 verificações HTTP pelo kernel real: páginas de 25/100, fontes/eventos disjuntos, filtros, recusa de parâmetros/contexto, leitor sem escrita, links, escaping e respostas privadas. A prova HTTP anterior de 17 controlos também passou no adaptador alterado, antes da expansão da carga.
- Provas adicionais isoladas: documento efectivamente por reconhecer aparece no filtro correcto; outra unidade da mesma empresa não aparece; comando posterior à leitura recusa uma origem entretanto alterada; leitor termina enquanto o escritor mantém bloqueio na empresa e não observa recibo ainda não confirmado.
Os cenários de decisões/afectações adicionais usaram apenas fixtures de leitura dentro de transacções com rollback. Não activaram confirmação de pagamentos pendentes no SGF nem instalaram permanentemente essa capacidade. O postcheck confirmou ausência dessas tabelas temporárias, cinco concessões QA originais preservadas e o recibo efectivo inicial inalterado. O fingerprint dos registos financeiros e de `pa_access`, em leitura, permaneceu igual antes/depois dos últimos testes e do HTTP.
O runner financeiro nativo passou a exigir uma base QA **nova** por execução, por usar `RefreshDatabase`. Uma tentativa de retoma encontrou uma função residual na preparação da própria base de prova e não foi contada como teste válido. Não se reparou schema instalado nem se fez reset dos hosts de regressão/demonstração protegidos. Diagnósticos e JUnit anteriores permanecem guardados; o consolidado selecciona apenas casos aprovados por nome.
## Reproduzir sem destruir provas
`scripts/payable-page-run.mjs <tag-da-origem-histórica>` cria uma base SGF nova e reutiliza a captura nativa existente, sem repetir ou alterar o workflow nativo. Executar `scripts/payable-history-sgf-proof.php <settings.json-privado> page-seed 51`, depois a fase `page-cases`. `scripts/payable-page-load.mjs <novo-tag>` expande a fixture por 1.000/5.000/10.000 e mede cada estratégia em processo próprio. Não voltar a executar os casos de 51 registos na fixture já expandida; não a reduzir/resetar. As fases `page-fresh-command`, `page-filter-positive`, `page-concurrent-read`, HTTP e `page-post` conferem o estado final. `scripts/summarize-payable-page.mjs <novo-tag>` consolida as provas preservadas. Usar PHP/Node fixados nas instruções locais.
PHP/HTML foram verificados sem novo build JavaScript, navegador ou dependências. O servidor HTTP temporário terminou apenas o processo próprio. Credenciais, cookies, configurações e cópias de fontes permaneceram na pasta QA privada, fora do relatório versionável.
## Limites e preservação
Fotografias de leitura são por pedido, não uma sessão longa/cursor que fixe várias páginas durante navegação humana. Cada página confere o histórico completo necessário dos documentos seleccionados; um único documento com histórico muito extenso precisa de avaliação própria.67 consultas constantes ainda incluem verificações de autorização/schema; os tempos locais não são garantia de SLA, throughput ou implantação.
O adaptador autónomo nativo conserva a sua listagem anterior: foi verificada a compatibilidade do núcleo, sem aplicar esta interface/paginação ao destino nativo. A passagem histórica continua por recibos de ensaio, sem origem viva autenticada ou cutover operacional da responsabilidade financeira. Não se declara Financeiro completo, contabilidade, reconciliação bancária ou capacidade de implantação. Revisão visual permanece separada e pendente.
Preservados seis registos de associação, cache bloqueada, provas/checkpoints anteriores, dados/acessos/configurações de demonstrações e instalações reais e trabalho alheio. Sem publicação, activação de Compras, novo direito real, migração/índice no destino ou checkpoint presumidos.
@@ -0,0 +1,44 @@
# Relatório financeiro — perfilagem e reutilização de captura validada
03/11/2026. Continuação técnica da [consulta de posições reconhecidas](SGF_PAYABLE_REPORT_DELIVERY.md), sem novo efeito financeiro ou direito. **Há código funcional de optimização**, além das rotinas de perfilagem. Não se repetiram as suites contabilísticas ou os benchmarks válidos de paginação de associações/documentos/pagamentos.
## Alteração implementada
O adaptador já validava integralmente cada recibo histórico na janela, mas devolvia só os pagamentos. O núcleo repetia `HistoricalPayments::capture` sobre esses mesmos pagamentos para comparar com a importação original. O relatório passa a pedir explicitamente um `HistoricalCapture` imutável, válido exclusivamente para aquela origem completa e contexto, reutilizando o resultado dessa primeira captura.
O recibo continua a passar pelo checksum, identidade/revisão, versão, validação integral de pagamentos e comparação do hash histórico. `PaymentDecisions::current` continua a reconstruir/verificar a importação original e as decisões. Não se retiraram verificações de auditoria, compatibilidade, montantes ou saldos. Os direitos e a pessoa continuam conferidos pelo percurso de leitura existente, sem cache de permissões.
O valor conserva a origem inteira, incluindo eventuais campos documentais chamados `revision` ou `missing`. Só aceita a origem original exacta ou a mesma origem com os metadados calculados exactos da listagem. Mudar ID local, quantidade de pagamentos, documento/versão, empresa/unidade/tenant ou esses metadados recusa a captura. A devolução do array não permite alterar o valor guardado. A janela termina sem retenção global dos valores.
**Comandos não usam estas capturas.** O núcleo recusa o valor quando o chamador não é o percurso de leitura conjunta; comandos conservam o carregamento e validação do histórico actual. O contrato anterior de `SupplierHistoryReceipts::page` continua a devolver arrays por omissão. Não se acrescentou parâmetro HTTP para optar por uma captura ou saltar validações.
## Ensaio e perfilagem
Nova base/role QA própria55439, `report-profile-b7f7d0c1c2c2`, restaurada de um dump só de leitura da fixture sintética de10.000 posições. Não se usou a base original para medições, escritas, manutenção ou decisões. Aproximadamente99,99% são cópias explícitas de volume do cenário original, não10.000 workflows de compras. Dump, configurações, credenciais, classe anterior arquivada e classes instrumentadas ficam privados.
Cada geração usa100 janelas de100 fontes, processos PHP independentes, limite512M e o mesmo contexto/filtro. A instrumentação está numa cópia privada da classe, sem opção de perfilagem na aplicação. Os tempos por etapa são de relógio e incluem as consultas dessas etapas; não se devem somar novamente os tempos SQL ao total. A actividade local não foi controlada; existe uma amostra por versão/condição. Não são resultados de carga sustentada ou de implantação.
| Implementação e condição | Tempo ms | Consultas | Pico heap PHP MiB | Selecção ms | Históricos ms | Posições ms | Hash/totais ms |
|---|---:|---:|---:|---:|---:|---:|---:|
| Anterior, restauro recente antes de ANALYZE |21548,229|2313|34|5920,125|3050,887|11710,591|424,818|
| Anterior, depois de ANALYZE só na cópia QA |22021,190|2313|34|2260,387|4136,342|14460,816|692,097|
| Captura reutilizada, mesmas estatísticas QA |12939,629|2313|34|1603,575|2902,426|7764,687|317,408|
O `EXPLAIN ANALYZE` anterior revelou um plano que estimava1 linha e processava10.000 antes de ordenar/limitar100, com60.185 blocos partilhados encontrados em cache e nenhum lido do disco nesse pedido. Actualizar estatísticas reduziu o tempo observado de selecção, **sem melhoria do total nessa amostra**. É um efeito de estatísticas, não de índice ou da captura reutilizada. A manutenção foi aplicada exclusivamente à cópia sintética nova; não é uma recomendação de aplicação automática no destino.
Entre a segunda e terceira linhas observou-se redução de cerca de41% no tempo total, com consultas/memória iguais e conteúdo financeiro idêntico. A alteração de código remove a captura duplicada; a variação local e a diferença dos tempos SQL impedem atribuir causalmente todo o ganho a essa única operação. Uma medição intermédia com a primeira implementação do vínculo da captura ficou diagnóstica e não é usada como resultado final; o vínculo foi reforçado para conservar campos documentais genuínos antes da medição final.
O gargalo **persiste**:12,9 segundos ainda é elevado para consulta interactiva. A etapa de posições ainda consome7,8 segundos, incluindo SQL, hidratação, reconstrução/verificação da importação e decisões, comparação e captura de resultados. O total SQL foi5,5 segundos e está incluído nas etapas. A próxima correcção mínima deve subperfilar essa etapa e o plano de selecção com estatísticas representativas, antes de escolher mais cache, índices ou geração assíncrona. Não se retiram validações apenas para reduzir o benchmark. Não houve índice experimental, índice no destino ou avaliação de throughput.
## Equivalência, recusas e preservação
-6 cenários/22 verificações em rollback: vínculo completo ao contexto/origem, metadados genuínos, imutabilidade, recusa da captura nos comandos, compatibilidade do contrato de arrays, igualdade de totais/componentes/hash/janelas, recibo inválido com saldo indeterminado e direito revogado.
-17 verificações HTTP reais na nova cópia:10.000 posições, foco, HTML/JSON, links de evidência, parâmetros indevidos, fonte/contexto inválidos, escape e `no-store`. Fotografia `REPEATABLE READ READ ONLY`, zero `FOR UPDATE`. Não são provas visuais.
-Comando efectivo `prepare_history` e repetição pelo motor normal, sobre a obrigação já reconhecida, devolvem o reconhecimento original sem outra obrigação. Prova revertida integralmente; o valor de janela não alimenta esse comando.
-Após medições e casos, a impressão digital financeira da cópia coincide com a prova válida original. A classe anterior arquivada e as provas/demos/pacotes antigos mantêm os seus hashes. Nenhum dado real ou associação protegida foi usado para este ensaio.
Os39 checks contados são22 de regressão e17 HTTP; o comando/repetição é registado como prova adicional, sem inventar outra contagem. Manifesto: [medições, igualdade e hashes](proofs/sgf-payable-report-capture-20261103.json). Originais, seis associações, cache bloqueada, demos e trabalho em curso preservados. Sem publicação, checkpoint, activação de Compras, concessões ou manutenção no destino. Revisão visual, carga sustentada e implantação continuam separadas e pendentes.
## Próxima integração proposta
A correcção de resultado industrial já lançado continua expressamente excluída da autorização actual. Foi preparado um recorte concreto [1800→1820, por par indivisível](GENERAL_LEDGER_INDUSTRIAL_CORRECTION_SCOPE.md), ainda só para decisão. A optimização de leitura desta entrega não autoriza esse novo efeito.
+49
View File
@@ -0,0 +1,49 @@
# Livro financeiro → relatório de obrigações reconciliado
02/11/2026 — `SGF-PAYABLE-POSITION-REPORT-SIM-v1`. Implementação local sintética, sobre a [consulta financeira coerente](SGF_SETTLEMENT_READ_ISOLATION_DELIVERY.md). Entregue código funcional de relatório. O primeiro lançamento contabilístico permanece **apenas especificado, por autorizar**, em [GENERAL_LEDGER_FIRST_SYNTHETIC_SCOPE.md](GENERAL_LEDGER_FIRST_SYNTHETIC_SCOPE.md).
## Percurso e significado
A consulta de obrigações SGF liga a **Relatório das obrigações reconhecidas abrangidas pelo filtro**. `GET /supplier-payables/report` apresenta o relatório; `GET /api/supplier-payables/report` devolve os mesmos campos em JSON. Critérios: número/fornecedor literal e origem local opcional, dentro do tenant/empresa/unidade activos. Mantém `supplier_payables.view` e `pa_access.view`; não cria direitos ou autoridade de decisão. Outros parâmetros, incluindo contexto injectado e data de corte não suportada, recusam 422.
O relatório abrange **todas** as obrigações reconhecidas do filtro, sem se limitar à página actualmente visível. O mesmo núcleo `Payables` fornece principal, confirmados históricos, afectações líquidas de reversões, saldo e compatibilidade. Não se guardou outro saldo ou um novo movimento pela consulta.
Apresenta separadamente principal original, quantidade de posições conhecidas/indeterminadas e componentes conhecidos. Uma posição com evidência divergente mantém o principal, mas deixa o saldo global **indeterminado**. O saldo conhecido é explicitamente parcial. Não se soma um desconhecido como zero. Vencimento ausente permanece contado como desconhecido, sem inventar datas ou atraso.
Os componentes conhecidos reconciliam-se exactamente: principal − confirmados históricos incorporados − afectações líquidas = saldo. Pagamentos ainda por afectar não abatem a dívida. Reporta MZN, sem soma entre moedas, recálculo fiscal ou classificação contabilística.
Cada geração tem captura UTC, âmbito, critérios e SHA-256 do conteúdo ordenado das posições/revisões. Links levam aos documentos e evidências existentes. JSON e ligações geram nova captura; não prometem recuperar um relatório arquivado. São posições actuais sobre recibos de ensaio, sem fonte histórica SGF viva ou corte histórico. A interface identifica esses limites.
## Leitura completa e correcção do gargalo encontrado
A primeira implementação segura reutilizava a listagem paginada em 100 fontes por janela. Na prova de 10.000 posições, revelou 6.607 consultas e 19,1 s, porque cada janela repetia contagens, autorizações e propostas/eventos de apresentação que o relatório não consumia.
Foi corrigida nesta entrega: `Payables::positionsPage()` usa o mesmo cálculo/leituras conjuntas da listagem, omitindo apenas as páginas de propostas/eventos. O adaptador partilha o predicado de filtros com a listagem e percorre IDs descendentes por chave, em vez de repetir contagens/offsets. Carrega até 100 fontes e suas dependências por janela. O motor construído para a janela só autoriza leitura; uma tentativa de comando nesse percurso lança recusa. Autoridade, identidade e contexto continuam conferidos durante o relatório.
Uma transacção própria `REPEATABLE READ READ ONLY` cobre a geração inteira. Não há bloqueios de escrita da empresa/actor. Se invocado dentro de transacção existente, exige pelo menos `repeatable read`/`serializable` e participa nela; recusa 409 um contexto aninhado incoerente. O percurso HTTP foi efectivamente verificado só de leitura. Não se mantém transacção aberta enquanto uma pessoa lê/confirma a página.
| Geração completa de 10.000 posições | Tempo ms | Consultas | Pico heap PHP MiB | Janelas |
|---|---:|---:|---:|---:|
| Reutilização inicial da listagem | 19.066,022 | 6.607 | 34 | 100 |
| Leitura específica conjunta por chave | 12.557,809 | 2.313 | 32 | 100 |
Totais, componentes e SHA-256 do conteúdo **iguais** antes/depois. Cenário: 10.000 obrigações sintéticas com os históricos importados conservados, principal 60,00 MZN e confirmados 30,00 MZN por posição. Principal global 600.000,00 MZN, confirmado histórico 300.000,00 MZN, saldo 300.000,00 MZN, sem afectações novas. 99,99% são cópias de volume explícitas da fixture anterior; não 10.000 workflows de compra executados.
Condições equivalentes: mesma base/role e filtro, PHP 8.4.27/512M, processos independentes, base local aquecida, uma amostra válida por implementação e actividade local não controlada. Memória é heap alocado, não RSS. Não houve índice novo/experimento de índice. Não se repetiram os benchmarks anteriores de páginas ou de pagamentos: são duas gerações completas do novo relatório, sobre o mesmo universo.
**Limite material:** 12,6 s continua elevado para 10.000 posições numa consulta interactiva. Retirou-se o custo de apresentação e reduziu-se o número de consultas, mas o custo restante não foi isolado por perfilagem. A correcção mínima seguinte é medir separadamente leitura, validação/captura histórica e serialização/hash antes de escolher outro índice, cache ou geração em segundo plano. Não se declara ausência de gargalos, carga sustentada ou capacidade de implantação.
## Provas e preservação
- Três cenários finais / 17 asserções: foco e filtros literais, identificação de conteúdo estável, vencimento desconhecido, mistura de saldo conhecido com histórico divergente, checksum inválido, âmbito estrangeiro em tenant/empresa/unidade, direito revogado e transacção aninhada incoerente. Repetidos apenas estes casos afectados depois da optimização; a prova inicial válida fica preservada e não se soma duas vezes.
- Livro de afectações/reversões anterior: 61 obrigações, principal 3.660,00 MZN, afectação líquida 3,92 MZN e saldo 3.656,08 MZN, reconciliados pelo núcleo. Nenhum pagamento ou lançamento criado pelo relatório.
- 17 verificações HTTP reais: autenticação, relatório completo de 61 posições, foco, reconciliação, JSON/HTML, retorno à evidência, ligação no workspace existente,422/403/409, escape HTML e `no-store`. Instrumentação confirma fotografia só de leitura e zero `FOR UPDATE`. Sem navegador ou revisão visual.
- Pós-ensaio confirmou os fingerprints integrais dos dois livros anteriores. Factos, direitos e provas permanecem iguais; alterações dos casos adversariais foram revertidas. Não se fizeram resets, limpezas de cache, concessões reais ou activação de candidatas.
Manifesto: [resultados, medições e hashes](proofs/sgf-payable-report-20261102.json). Rotinas dirigidas no harness protegido: fases `payable-report-volume-batch`, `payable-report-cases-batch`, `payable-report-settlements` e `payable-report-post`. HTTP: `scripts/payable-report-http.mjs <tag>`. Consolidação sem repetir provas: `scripts/summarize-payable-report.mjs`. Marcadores concluídos são preservados; credenciais, sessões e logs ficam privados. Sintaxe PHP/JavaScript e diferenças verificadas; Blade renderizado pelo kernel HTTP, sem build JavaScript novo.
## Próxima fronteira
O relatório funcional não resolve reconhecimento contabilístico, períodos, razão ou lançamentos. A proposta [COMMON-LEDGER-PAYABLE-SIM-v1](GENERAL_LEDGER_FIRST_SYNTHETIC_SCOPE.md) delimita um primeiro lançamento equilibrado, contas/período artificiais, separação de funções, quatro direitos exclusivamente QA e testes, para autorização específica. Não há código funcional contabilístico nesta entrega.
Seis registos protegidos, cache bloqueada, demos, configurações/direitos reais e alterações alheias preservados. Sem publicação, checkpoint, migração no destino ou activação de Compras. Revisão visual, optimização adicional de relatórios e implantação permanecem separadas; a autorização seguinte não as transforma em provas concluídas.
@@ -0,0 +1,35 @@
# Continuidade contextual de Compras — entrega local de 03/11/2026
`SGF-PURCHASING-CONTEXTUAL-NAVIGATION-QA-v1` resolve a perda de contexto ao abrir as etapas do dossiê. Os cartões autorizados agora abrem a requisição, propostas da requisição, adjudicação/ordem, recepção ou factura exacta. O cartão da factura permite abrir a consulta da obrigação dessa origem quando o perfil possui o respectivo acesso. As continuações existentes de requisição → propostas → adjudicação/ordem → recepção também preservam os IDs.
## Implementação
`ProcessNavigation` acrescenta ligações apenas aos registos já projectados nas páginas autorizadas do dossiê. Reutiliza as decisões de visibilidade calculadas pelo dossiê, sem consultas adicionais, novas contagens, direitos ou writers. Etapas restritas não recebem ligações nem IDs dessas etapas. A funcionalidade fica desligada por omissão em `receipt_qa.focus_enabled`.
O componente comum `purchasing-focus.mjs` lê parâmetros delimitados por etapa, recusa parâmetros desconhecidos/repetidos, valores vazios, não inteiros, negativos ou fora da precisão segura. Só aceita ligações locais às etapas conhecidas. Abrir uma página faz consultas; não prepara prévias, confirma, aprova, emite ou reconhece uma obrigação. Não muda empresa, unidade, módulo ou identidade.
Os sete módulos de interface envolvidos — requisições, propostas, ordens, recepções, facturas, obrigações e dossiês — carregam a lista habitual e consultam o ID explícito através da API própria. Assim, o destino não depende de o registo estar nos primeiros25. Não se percorre todo o universo nem se escolhe o primeiro registo como alternativa. Interagir enquanto a lista inicial está pendente cancela o foco automático atrasado.
Uma recepção indicada é conferida contra a ordem antes de apresentar a sua evidência/anexos; uma factura indicada tem de constar da ordem autorizada. Se não corresponderem, apresenta-se a recusa e não se substitui pelo primeiro documento. Os endpoints continuam a verificar a autoridade actual, contexto e isolamento. Os comandos e respectivas conferências de versão permanecem nos serviços existentes.
## Provas sem repetir o percurso financeiro
[Consolidação](proofs/purchasing-focus-composition-20261103.json): **77 verificações**, sendo26 HTTP/leitura,36 de lógica da interface,12 da demonstração e3 de build/assets.
A aplicação de leitura nova `purchasing-focus-read-8a8270d3bfec` reutiliza o livro de regressão já concluído `b4093c6f6707`, no cluster QA55439. Não repete requisição, aprovação, emissão, recepção, factura ou reconhecimento. Os oito atalhos correlacionam os IDs efectivos da requisição3, adjudicação2, ordem1, recepção de origem e factura2/obrigação100MZN. As páginas e APIs de destino foram consultadas com o perfil autorizado. Uma fotografia de **142 tabelas e respectivas sequências** antes/depois ficou igual.
Inclui perfil limitado à requisição sem ligações económicas, Compras sem ligações a facturas/obrigações, ligações copiadas recusadas no destino, origem estrangeira/desconhecida, módulo/unidade diferentes e token de contexto antigo. Desactivar a funcionalidade conserva o payload anterior do dossiê.
Os36 testes JavaScript usam DOM simulado e executam os sete ficheiros reais de interface com respostas mínimas sintéticas de leitura. Comprovam foco fora da primeira página, ausência de POST, correspondência entre factura/recepção e ordem, parâmetros ambíguos, ligações externas, resposta inicial atrasada e modo desligado. Não são revisão visual ou acessibilidade em navegador. Não se repetiu a via de navegador bloqueada.
Verificação final: sintaxe de sete ficheiros PHP e16 JavaScript aprovada; build privado e assets servidos conferidos. `git diff --check` sem erros de espaços. Matriz/inventário actualizados com seis módulos,13 etapas,82 fontes, zero ciclos obrigatórios e126 critérios documentais conferidos; estes valores não são novas provas operacionais. A primeira sonda da demonstração falhou antes dos pedidos HTTP por ordenar `geo_locations` por um ID inexistente; o teste foi corrigido para a chave composta efectiva e as12 verificações da demonstração passaram.
## Demonstração e preservação
Nova composição isolada `0275f83f7456`, **8078**: [Solicitante](http://127.0.0.1:8078/qa/enter/requester?open=1), [Compras](http://127.0.0.1:8078/qa/enter/actor?open=1), [Finanças](http://127.0.0.1:8078/qa/enter/issuer?open=1). Começa sem operações principais, recepções, facturas ou obrigações, com os fornecedores/orçamento QA preparados. Inclui anexos de fornecedor/recepção das entregas anteriores. A identidade de cada interveniente mantém as suas permissões: uma ligação não substitui a intervenção de outro perfil.
Os probes da demonstração conservam as tabelas de negócio seleccionadas, auditoria nativa, direitos e localizações. Código raiz e cópias privadas foram comparados por SHA; manifestos nativos continuam fixados.8077 e anteriores, seis registos protegidos, cache bloqueada, provas válidas e trabalho alheio preservados. Sem migração/concessão real, activação de Compras, publicação, aceitação ou checkpoint.
## Limites
É continuidade de consulta, não uma fila universal, decisão de prontidão ou execução automática da etapa seguinte. Filtros/páginas das listas permanecem independentes da origem indicada pelo atalho. O dossiê só cria cartões/atalhos dos registos da página actualmente visível. Revisão visual, carga sustentada, compatibilidade de instalação, privilégios mínimos e capacidade de implantação continuam pendentes e exigem evidência própria. A conclusão deste recorte não declara a aplicação completa ou utilização operacional validada.
+40
View File
@@ -0,0 +1,40 @@
# Dossiê de leitura do processo de Compras
03/11/2026. `SGF-PURCHASING-DOSSIER-QA-v1`. Consulta conjunta dos registos efectivos da requisição, propostas, adjudicação, ordens, recepções, facturas, obrigação e histórico autorizado. Não prepara decisões nem replica os motores financeiros.
## Experimentar em8074
[Solicitante](http://127.0.0.1:8074/qa/enter/requester?open=1), [chefia](http://127.0.0.1:8074/qa/enter/approver?open=1), [Compras](http://127.0.0.1:8074/qa/enter/actor?open=1) e [Finanças](http://127.0.0.1:8074/qa/enter/issuer?open=1) encontram **Dossiês e evidência** no mapa e na navegação comum. A entrada exige o direito existente de consulta da requisição; ter apenas recepções ou facturas não concede este dossiê.
A demonstração nova conserva o percurso integrado, começando sem operações principais. Depois de preparar uma requisição e avançar nas etapas autorizadas, o dossiê encontra os mesmos documentos e respectivos IDs. Três fornecedores e orçamento QA1000MZN são preparação explícita; nenhuma localização atribuída.8073 e anteriores não foram actualizadas. A pesquisa paginada de fornecedores continua disponível, com os três fornecedores desta nova fixture; o directório ampliado de125admissíveis permanece na demo8073.
## Implementação
- `/purchasing/dossiers` e `/api/purchasing-dossiers`: lista paginada25, com filtro de estado e pesquisa literal pelo número da requisição. A origem usa `RequisitionAccess` e a visibilidade nativa actual, no contexto exacto da empresa/unidade.
- O detalhe confere separadamente o direito de consulta de cada etapa e a função nativa, mantendo as concessões consultadas bloqueadas durante a leitura. A consulta financeira da obrigação passa também pelo adaptador original. Não foram criados novos direitos.
- Etapas sem acesso devolvem apenas `accessible:false`: sem linhas, contagens, IDs ou montantes escondidos no JSON. A interface distingue **restrito** de **sem registos nesta página**. O histórico filtra as acções das etapas autorizadas e projecta apenas ID, autor, tipo e data, sem fotografias anteriores/posteriores de outros domínios.
- Propostas, adjudicações, ordens, recepções, facturas e histórico têm páginas independentes25 no servidor. Para obrigações, a janela é de25facturas de origem; posições/saldos vêm do mesmo núcleo. A paginação financeira está identificada como janela de origens, sem inventar uma contagem global de dívidas.
- A impressão da vista cobre somente os dados/páginas visíveis e o contexto. Não é uma aprovação da operação seguinte, uma revisão de todo o universo ou substituto das prévias existentes. Cada etapa mantém a sua conferência e histórico próprio.
- O dossiê tem apenas endpoints GET. Não cria reservas, compromissos, movimentos, documentos, obrigações, pagamentos ou lançamentos. A navegação remete para as etapas existentes; nenhuma etapa é confirmada automaticamente.
## Provas e reutilização
[Consolidação](proofs/purchasing-dossier-composition-20261103.json):49verificações — leitura30, guardas4, demonstração12 e build/assets3. As provas de leitura reutilizam a base **de regressão**, não a demo, que já continha o percurso completo100MZN. Foi criada outra aplicação e outras sessões privadas, preservando a aplicação, configuração, ligações e dados da prova anterior. Não se repetiu qualquer comando financeiro.
Foram comparadas as142tabelas das duas bases e as suas sequências antes/depois: a impressão permaneceu exactamente igual. O dossiê encontrou os IDs originais da ordem, factura e obrigação, principal/saldo100MZN e vencimento desconhecido. Verificou páginas distintas de evidência/histórico, filtros, contexto desactualizado, unidade/módulo indevidos, origem estrangeira e recusa de POST.
Compras não recebeu dados de facturas/obrigações sem os direitos próprios; o solicitante recebeu apenas a requisição e o seu histórico autorizado, sem linhas ou contagens posteriores. Perfis apenas de Armazém ou revisão de facturas não herdaram consulta de requisições.
Na demonstração **nova e vazia**, os testes conferem os perfis e a revogação/restauro de uma concessão QA existente, deixando os dados e concessões exactamente iguais ao início. Esse ensaio de revogação não alterou a base de regressão reutilizada ou qualquer acesso real. Guardas de capacidade desligada/ambiente real recusaram antes de SQL.
As provas anteriores do percurso integrado, pesquisa de fornecedores e obrigação permanecem preservadas, sem repetição das suites de escrita, concorrência, recuperação ou contabilidade.
A [matriz actualizada](proofs/dossier-matrix-20261103.json) conserva seis módulos,13estágios e112critérios documentados. A [inspecção estática](proofs/dossier-flow-20261103.json) encontra74fontes e nenhum ciclo obrigatório, sem ligações a bases. Passaram9verificações de sintaxe PHP,7de JavaScript e `git diff --check`; estas verificações não constituem prova visual ou de implantação.
## Limitações e preservação
Este é um dossiê de leitura com permissões por etapa; não é fila universal de tarefas, aprovação transversal ou motor de previsão da próxima decisão. Sem registos numa página não prova que o processo esteja pronto para avançar; as regras e prévias de cada etapa continuam a decidir essa possibilidade.
A nova demonstração começa vazia; o percurso completo já realizado é utilizado somente pela prova de leitura na base de regressão. Não se copiaram decisões para a demo da equipa. Revisão visual, carga sustentada e capacidade de implantação continuam pendentes, sem repetir o navegador bloqueado ou inferir produção a partir destes ensaios.
Configuração desligada por omissão. Nenhuma migração/concessão no destino, alteração dos seis registos protegidos, limpeza da cache bloqueada, activação de Compras, publicação, aceitação ou checkpoint. Pagamentos/contabilização da nova origem, anexos/correcções e reunião dos restantes módulos conservam âmbitos próprios.
@@ -0,0 +1,47 @@
# Percurso de Compras numa única composição SGF
**Continuidade de04/11/2026:** a instalação de trabalho actual é **http://127.0.0.1:8085/compras**, consolidada no lugar, com o percurso C01–C10 comprovado pelos formulários e exemplo concluído. Ver [resultado](PURCHASING_COMPLETION.md) e [guia](COMPRAS_USO_LOCAL.md). As instruções8072 abaixo são históricas; não é necessário alternar entre essas demonstrações. Não foi activada instalação empresarial nem presumida revisão visual.
03/11/2026. `SGF-PURCHASING-INTEGRATED-QA-v1`. A nova demonstração reúne requisições, fornecedores, propostas/adjudicação, ordens, recepções, facturas, obrigações e a referência geográfica no mesmo host e no mesmo livro nativo. Não exige mudar de demonstração ou reconfigurar identificadores entre essas etapas. As versões anteriores permanecem intactas.
## Experimentar em8072
Cada entrada abre o mesmo mapa de trabalho, com apenas as etapas autorizadas para o perfil. As páginas de trabalho partilham a navegação, mantendo as decisões e conferências nos serviços existentes.
1. [Solicitante](http://127.0.0.1:8072/qa/enter/requester?open=1): preparar uma requisição1UN a100MZN, imposto0, e submetê-la.
2. [Chefia](http://127.0.0.1:8072/qa/enter/approver?open=1): aprovar a requisição exacta por identidade distinta.
3. [Compras](http://127.0.0.1:8072/qa/enter/actor?open=1): registar três propostas dos fornecedores QA preparados, por exemplo100/120/140MZN. Compras e [Finanças](http://127.0.0.1:8072/qa/enter/issuer?open=1) registam as suas avaliações individuais; comparar e escolher expressamente com fundamento. A chefia aprova a adjudicação; Compras emite a ordem.
4. [Armazém](http://127.0.0.1:8072/qa/enter/validator?open=1): conferir e receber1UN aceite/conforme no artigo/armazém QA.
5. Finanças regista a factura recebida100MZN, base100, imposto0, quantidade1UN. [Revisor financeiro](http://127.0.0.1:8072/qa/enter/reviewer?open=1) confere e valida, consumindo o compromisso existente uma vez.
6. Finanças prepara a fotografia da obrigação, com fundamento e prévia; o revisor reconhece a versão exacta por pessoa distinta. [Outra identidade QA](http://127.0.0.1:8072/qa/enter/auditor?open=1) conserva papel separado.
As listas das etapas encontram os mesmos documentos autorizados; não é necessário copiar IDs. A localização de fornecedor continua acessível pelo cadastro. Os selectores comuns de empresa/unidade/cliente permanecem nos respectivos percursos existentes, sujeitos ao módulo e contexto correctos; nada recebe localização automaticamente.
A demonstração começa sem requisições principais, propostas, adjudicações, ordens, recepções, facturas, propostas de obrigação ou dívidas. Prepara três fornecedores QA e orçamento aprovado1000MZN; nenhuma reserva/compromisso inicial. Uma requisição estrangeira serve apenas a prova de isolamento. O catálogo versionado tem20.407linhas e zero localizações atribuídas. A prova completa usou outra base nova, não a demonstração da equipa.
## O que mudou
- `/purchasing/workspace`: mapa das etapas autorizadas no contexto actual. `WorkspaceNavigation` usa capacidades e direitos existentes; não cria novos nomes de direitos, indicadores fictícios, decisões ou efeitos financeiros. O runtime conserva as guardas de ambiente, base, empresa/unidade e origem.
- Navegação comum nas sete páginas de Compras, preservando os formulários, prévias, históricos, versões e validações nativas. O mapa pertence expressamente ao módulo Compras; mudar para Comercial exige voltar ao contexto correcto antes de o abrir.
- Modo explícito `integrated` no compositor QA. Combina os preparadores existentes numa base de host e numa base nativa novas, com as mesmas identidades e o mesmo pacote fixado. A chefia de requisições/adjudicação mantém-se distinta das identidades financeiras, incluindo depois de montar facturas e obrigações.
- Reutiliza o ciclo `sgf.request.command` e os filtros de origem já implementados. A requisição criada durante o teste chega às propostas, ordem, factura e obrigação sem acrescentar IDs estáticos à ligação e sem criar orçamento ou dívida concorrentes no host.
## Provas e preservação
[Consolidação](proofs/purchasing-integrated-composition-20261103.json): **68 verificações** — percurso integrado29, guardas5, navegação inicial6, demonstração25 e build/assets3. A etapa integrada confirma uma reserva, um compromisso, um consumo100MZN, um movimento físico e uma obrigação100MZN/saldo100MZN, com vencimento desconhecido. Orçamento do host inalterado, zero pagamentos e zero atribuições geográficas automáticas.
Os26 primeiros critérios do percurso passaram. A verificação final esperava403 para Comercial; nesta composição, a referência geográfica torna esse módulo disponível à identidade financeira, pelo que a recusa correcta de um percurso de outro módulo é409. Corrigiu-se apenas essa expectativa e retomaram-se os três critérios finais, sem repetir comandos financeiros. A prova individual anterior de concorrência/recuperação mantém-se válida e não foi reexecutada.
As25 verificações da demonstração conferem os sete perfis, navegação filtrada, páginas efectivamente servidas e a ausência de alteração de dados ao navegar. São provas HTTP/build, não revisão visual. O código continua funcional nos serviços originais; não se substituiu a implementação por documentação ou fotografias pré-calculadas.
As provas anteriores72/77/103/83 e respectivos manifestos foram preservadas e reutilizadas, sem recontagem como testes novos. Sem ligações à base de destino, alterações dos seis registos protegidos, limpeza da cache bloqueada, actualização das demos anteriores, novas concessões reais, activação de Compras, publicação, aceitação ou checkpoint.
A [matriz actualizada](proofs/purchasing-integrated-matrix-20261103.json) mantém seis módulos,13estágios e104critérios documentados. A [inspecção estática](proofs/purchasing-integrated-flow-20261103.json) encontra69fontes e nenhum ciclo obrigatório; estes totais não são testes operacionais adicionais nem prova de implantação.
## Limitações
Esta composição reúne **o percurso de Compras**, não todos os seis módulos do ERP numa instalação final. A nova origem ainda não inclui pagamentos/afectações, migração da responsabilidade de histórico, contabilização, correcções/notas de crédito ou anexos binários de facturas. Essas capacidades mantêm os âmbitos e aprovações próprios; não são activadas por navegar no mapa.
Revisão financeira de fornecedores e decisões geográficas conservam as provas anteriores; este incremento não repete as suas suites completas. Não se migram os antigos `ir_requests` com reserva no host. Vencimento desconhecido não é convertido em atraso ou data inventada.
Revisão visual continua separada, sem repetir o navegador bloqueado. Carga sustentada, instalação geral e separação de proprietário/runtime permanecem por validar. O schema sintético é preparado pelas migrações nativas actuais e o runtime usa o pacote fixado anteriormente; estes ensaios não validam capacidade de implantação.
+45
View File
@@ -0,0 +1,45 @@
# Continuidade utilizável e isolamento de históricos — 03/11/2026
`SGF-PURCHASING-USABLE-CONTINUITY-QA-v1` corrige duas falhas da interface de recepção, completa as ligações recepção → factura → obrigação e fecha uma fuga de eventos entre históricos de etapas do percurso QA.
## Correcções funcionais e integração
A linha de recepção criava um elemento `select` simples, embora o restante formulário tentasse usar `activate` e `selected` do selector pesquisável. Foi ligada ao `stockChoice` já existente. Marcar a linha agora activa a pesquisa por linha, permite escolha expressa do artigo e envia o ID e a impressão da versão na prévia. Alterar/desmarcar a escolha mantém as invalidações existentes.
O primeiro pedido do selector enviava `search=`. O middleware convertia esse texto vazio em `null`, que era recusado por `sometimes|string`. Os catálogos de artigos e fornecedores agora aceitam o filtro vazio/nulo como ausência de pesquisa. Pesquisa literal não vazia, paginação, isolamento, estados do processo e rejeição de arrays/parâmetros desconhecidos mantêm-se. Não se retirou uma regra nativa para tornar o catálogo disponível num processo fechado.
A recepção abre as facturas da mesma ordem. Cada factura abre a obrigação dessa origem, as recepções da ordem e, havendo acesso, o dossiê da requisição. A obrigação volta à factura exacta e à sua ordem física. Os atalhos adicionais só aparecem quando a etapa consta do menu apresentado; isso é uma indicação de interface, não autoridade. Cada API de destino continua a validar o contexto e o acesso actual. A funcionalidade adicional fica desligada por omissão em `receipt_qa.continuity_enabled`.
## Isolamento dos históricos
Os detalhes da requisição e o histórico paginado das propostas consultavam toda a auditoria da requisição. Numa origem com factura/obrigação posteriores, podiam devolver esses eventos e respectivos payloads a um perfil limitado à etapa anterior. A prova antiga do dossiê não cobria esta via alternativa.
`ProcessHistory` aplica o âmbito **na consulta SQL, antes do limite, contagem e paginação**. Requisição mostra apenas `requisition.*`/`sgf.request.command`; propostas mostram os eventos da requisição, propostas e adjudicação. Facturas conservam o seu endpoint próprio de histórico autorizado. A auditoria original não foi apagada, alterada ou reclassificada. O dossiê continua a fazer a consulta transversal filtrada pelas permissões de cada etapa.
Não foram criados direitos, writers ou endpoints de confirmação. Os blocos `preview`/`confirm` dos controladores de requisição, propostas e recepção foram comparados com8078 e são iguais; os controladores de factura/obrigação e os manifestos nativos também se mantêm.
## Provas afectadas
[Consolidação técnica](proofs/purchasing-continuity-composition-20261103.json): **55 verificações**.
- 17 de interface simulada com **HTTP real**: carregar a ordem, activar a linha, pesquisar, escolher o artigo, enviar versão, conferir, invalidar prévia por edição, confirmar e recuperar uma resposta perdida após commit. Resultado real:201/200, uma recepção e um movimento de1000milésimos/1UN, artigo escolhido preservado. Não é uma nova prova de concorrência.
- 8 de fronteiras dos filtros: pesquisa inicial vazia igual à omitida; espaços tratados como filtro vazio; arrays/tamanho de página/parâmetros inválidos recusados; direito de Compras e fecho por adjudicação respeitados. Mantém uma recepção/movimento e zero facturas, obrigações ou pagamentos.
- 12 de históricos: o livro canónico anterior contém os eventos financeiros que reproduziam a falha; requerente/Compras/Finanças recebem apenas a história da requisição nesse endpoint; todas as páginas de propostas mantêm os seus eventos únicos e excluem os posteriores. Finanças conserva o histórico da factura e o acesso indevido continua recusado.
- 9 de ligações na interface: origem exacta, menu limitado, modo desligado, compatibilidade do dossiê e abertura só com GET.
- 9 da demonstração: estados iniciais, flags nas três áreas e SHA dos quatro módulos estáticos afectados, sem alteração dos dados/auditoria/concessões seleccionados.
A regressão de interface usa a composição nova `ce4c9bef1a51`, no cluster isolado55439. A ordem de100MZN foi preparada pelos workflows efectivos necessários. Uma requisição adicional aberta de1MZN é fixture delimitada para ensaiar o selector de fornecedores antes da adjudicação: reserva própria100unidades menores no mesmo livro, sem segunda ordem/dívida. Não é repetição da suite financeira anterior.
Os históricos reutilizam o livro já concluído `b4093c6f6707`, através da aplicação de leitura nova `purchasing-continuity-read-e266c0e778c2`: **142 tabelas e sequências intactas**, sem repetir comandos. As provas válidas de catálogo/paginação/concorrência/dossiê anteriores foram preservadas.
Verificação final: sintaxe de11 ficheiros PHP e12 JavaScript aprovada; `git diff --check` sem erros de espaços. Matriz/inventário actualizados: seis módulos,13 etapas,85 fontes, zero ciclos obrigatórios e134 critérios documentais conferidos. Os números do inventário não são testes operacionais adicionais ou validação dos módulos completos.
O primeiro ensaio de interface parou antes da confirmação, o que revelou a validação de pesquisa vazia. Os diagnósticos privados foram conservados; após a correcção, o percurso real terminou com as17 verificações. Não se declara esse ensaio inicial como aprovado ou uma revisão no navegador.
## Demonstração e limites
Nova demonstração **8079**: [Solicitante](http://127.0.0.1:8079/qa/enter/requester?open=1), [Compras](http://127.0.0.1:8079/qa/enter/actor?open=1), [Armazém](http://127.0.0.1:8079/qa/enter/validator?open=1), [Finanças](http://127.0.0.1:8079/qa/enter/issuer?open=1). Composição `2d2d938a3bec`, sem operações principais/recepções/facturas/obrigações iniciais, com fornecedores e orçamento QA preparados. Conserva as funcionalidades de dossiê, cartografia e anexos já entregues.
8078 e anteriores, seis registos protegidos, cache bloqueada, provas e trabalho alheio preservados. Sem migração/concessão real, activação de Compras, publicação, aceitação ou checkpoint.
Os testes usam DOM simulado; a ligação HTTP real comprova o contrato funcional, não renderização, acessibilidade ou aceitação visual. A revisão visual continua separada, sem repetir a via bloqueada de navegador. Os atalhos não aprovam, determinam prontidão ou executam a etapa seguinte. A requisição conserva os últimos25 eventos próprios no detalhe; propostas continuam paginadas e o dossiê mantém evidência transversal filtrada. Não foram alterados React/CSS/dependências do build Vite: preserva-se a prova válida anterior, verificando sintaxe e bytes servidos dos módulos ES estáticos afectados. Carga sustentada, instalação e capacidade de implantação exigem provas próprias.
+42
View File
@@ -0,0 +1,42 @@
# Anexos privados da recepção — entrega local de 03/11/2026
`SGF-RECEIPT-DOCUMENTS-QA-v1` implementa guias de entrega, relatórios de qualidade e outros documentos no histórico de cada recepção. Reutiliza `ReceiptDocuments::add` e a descarga do controlador original fixados no manifesto da composição, sem outro writer. A área abre ao consultar uma recepção no histórico; os eventos documentais entram também no dossiê da requisição, nas páginas e etapas autorizadas.
## Comportamento
- Metadados privados em páginas SQL de15, ordenadas por ID descendente; sem caminhos de armazenamento ou tenant nativo no resultado.
- Tipo e ficheiro escolhidos individualmente, fundamento obrigatório, prévia reversível e impacto antes de confirmação. A prévia não altera registos/auditoria e remove apenas o ficheiro temporário que criou.
- Confirmação vincula bytes/SHA, nome, pessoa, contexto da sessão, perfil de origem, versão da recepção e prazo de600segundos; volta a verificar permissões e autoridade nativa. A versão refere-se à recepção imutável, não transforma anexos em nova decisão de qualidade.
- Reutiliza `purchasing_receipts.view/confirm`, admissão da ordem/origem por empresa/unidade e políticas originais. Não cria direitos novos. Ambas as funcionalidades de anexos ficam desligadas por omissão fora das composições QA.
- Uma chave recupera o resultado sem outra escrita. Outra intenção explícita com o mesmo tipo/SHA na mesma recepção reutiliza o documento original e o seu nome, mantendo o novo evento de intenção. Não há deduplicação global entre recepções ou tipos.
- Descarga original com verificação SHA, confinamento privado, `nosniff`, sem cache e CSP sandbox; autor/data/documento/SHA ficam no histórico da requisição. Anexos não alteram quantidades, qualidade, aceitação, ordens ou movimentos físicos e não criam factura, obrigação ou pagamento.
- Compensação após falha elimina apenas ficheiro novo cujo registo se comprovou não confirmado. Resultado de commit incerto conserva evidência para recuperação. Reutilizar documento existente nunca autoriza apagar o ficheiro original.
## Provas
Prova consolidada: [receipt-documents-composition-20261103.json](proofs/receipt-documents-composition-20261103.json). **58 verificações**:28 principais,6 adicionais,4 guardas,8 da demonstração,3 de build/entrega de assets e9 de lógica do componente com DOM simulado.
Regressão isolada `1968d008dac9`, cluster QA55439: origem mínima produzida pelos workflows efectivos de requisição, propostas/avaliações, adjudicação, ordem e recepção. Não foram repetidas as suites anteriores. Um documento foi criado pela API e15 pelo mesmo serviço nativo para preparar volume:16 registos/ficheiros, páginas15/1, zero ficheiros temporários. Uma segunda intenção API reutiliza o primeiro documento. Duas sessões concorrentes terminam com201/200, um documento e um ficheiro. Falha na auditoria exterior reverte o registo e compensa o ficheiro; repetir depois termina correctamente.
Inclui recusas por direito retirado, tipo/extensão/conteúdo inválidos, bytes substituídos, revisão incompatível, conferência expirada, perfil/contexto alterado, outro módulo/unidade e proprietário inexistente. Alteração dos bytes armazenados impede descarga e recuperação. O ramo original de prévia de documentos do fornecedor foi exercitado após a generalização do helper, preservando o fornecedor e os16 anexos da recepção.
Verificação final: sintaxe de14 ficheiros PHP e9 JavaScript aprovada; build privado e correspondência dos assets servidos aprovados. `git diff --check` sem erros de espaços. Inventário estático actualizado: seis módulos,13 etapas,80 fontes, zero ciclos obrigatórios; matriz com118 critérios documentais conferidos. Estes números de inventário não são testes funcionais adicionais ou validação operacional de todos os módulos.
As provas válidas do prefixo foram conservadas. O teste do dossiê foi corrigido para usar Compras e a página efectiva do histórico: Armazém não tem direito de entrada no dossiê. A recusa de outro módulo para Armazém é403, por falta desse acesso, ao contrário do409 de um perfil que também tenha acesso ao módulo. As verificações finais retomaram apenas o sufixo pendente. A asserção física final confirma uma recepção e um movimento de1000milésimos; não se apresenta uma fotografia integral antes/depois de todas as tabelas do percurso.
## Demonstração e preservação
Composição nova `8c363c2b4ac1`, loopback **8077**:
- [Compras](http://127.0.0.1:8077/qa/enter/actor?open=1): iniciar requisição e continuar o percurso integrado.
- [Armazém](http://127.0.0.1:8077/qa/enter/validator?open=1): recepções e respectivos anexos.
Começa sem requisições principais, recepções ou anexos; três fornecedores e orçamento QA preparados. Os probes de leitura preservaram a fotografia de fornecedores/recepções/documentos/auditoria da nova demonstração. Código raiz e cópias QA foram comparados por SHA; manifestos nativos mantêm os pins anteriores. As provas anteriores e `packages/purchasing/current.json` foram conferidos, sem os substituir.
8076 e anteriores, seis registos protegidos, cache bloqueada, dados/acessos reais e alterações alheias não foram modificados. Sem migração no destino, activação de Compras, publicação, aceitação ou checkpoint.
## Limitações e próximos trabalhos separados
O ensaio binário positivo usa PNG. As regras nativas de PDF/JPEG foram preservadas, sem declarar nova regressão completa desses leitores. Anexar não certifica autenticidade, validade fiscal ou tipos universalmente obrigatórios. Reconciliação de ficheiros órfãos após crash, retenção, quotas e carga sustentada de armazenamento continuam pendentes. Sequências de prévias podem avançar e directórios temporários vazios podem permanecer.
O DOM simulado prova lógica de tipos, impacto, confirmação explícita, edição e respostas atrasadas; não constitui revisão visual, acessibilidade ou aceitação no navegador. Não foi repetida a via de navegador bloqueada. O schema QA é preparado a partir da fonte actual e o runtime permanece fixado; instalação geral, compatibilidade de implantação e privilégios mínimos exigem prova própria. A aplicação completa não é declarada terminada por esta entrega; anexos/correcções de outros documentos e restantes lacunas da matriz mantêm o seu âmbito separado.
+61
View File
@@ -0,0 +1,61 @@
# Recepção de mercadoria no SGF — entrega funcional QA
03/11/2026. Está implementado o percurso **ordem → conferência no SGF → confirmação → movimento único → histórico**. A configuração operacional permanece desactivada no destino.
## Demonstração utilizável
Nova composição isolada, com uma ordem de 2 cx, nenhuma recepção e nenhum movimento inicial:
- [Recebedor sintético](http://127.0.0.1:8064/qa/enter/actor?open=1): conferência e confirmação.
- [Leitor sintético](http://127.0.0.1:8064/qa/enter/validator?open=1): consulta sem capacidade de confirmar.
- [Emissor da ordem](http://127.0.0.1:8064/qa/enter/issuer?open=1): a política original impede receber a própria ordem.
Seleccionar a ordem, preencher guia/data, escolher armazém, marcar a linha e indicar quantidades recebida/aceite, qualidade e artigo. Conferir o impacto e confirmar. Aceitar integralmente 2 cx conclui a ordem; recepção parcial conserva os acumulados. Reservas/rejeições exigem evidência e não se tornam aceitação automaticamente. Abrir a recepção no histórico mostra o documento e o movimento original.
Se a resposta se perder, repetir a mesma confirmação recupera o registo original. O formulário conserva a chave preparada. Alterar campos exige nova prévia; uma origem entretanto alterada exige nova conferência. A prévia tem validade de dez minutos; o histórico permanece consultável sem repetir comandos.
As entradas automáticas acima pertencem apenas ao launcher privado em loopback, fora das rotas operacionais. Cookie, armazenamento e bases são novos; 8039, 8062/8063 e restantes demonstrações permanecem preservadas.
## Workflow e autoridade únicos
`ReceiptRuntime` compõe localmente o `ReceiptWorkflow` original de Compras, incluindo políticas, validação, conflitos, quantidades cumulativas, auditoria e hooks de lotes/reposição. Não usa um conector HTTP ou um novo algoritmo de recepção. O empacotamento transforma somente tokens PHP de namespace `App` para permitir coexistência com os modelos SGF. Expressões de negócio e strings não mudam; originais e pacote têm hashes fixados.
O writer físico continua a ser `inventory-write/releases/0.1.0`, manifesto `f0b99e591f9a4df135e685f64ceffad77bed259222debe0f34c20f95e3cad800`. Não existe cópia SGF concorrente de recepções ou movimentos. Documento, linhas, movimento, auditoria original e proveniência SGF pertencem à mesma transacção nativa. A proveniência regista contexto/operador SGF, versão da composição e recepção; falhar essa auditoria desfaz a confirmação inteira. Repetições não duplicam efeito ou proveniência.
Operador, tenant de origem, empresa/unidade SGF, ordens e armazéns são ligados explicitamente na fixture. Não se presume equivalência numérica entre identificadores nem se fazem associações automáticas. A prévia cifrada vincula operador, contexto, ordem, revisão, versão da composição e prazo. Na confirmação, o workflow original revalida a operação.
O host bloqueia e revalida os direitos/participação até terminar a transacção nativa; não escreve uma segunda cópia de negócio. Ligação, autenticação e ambiente temporários são restaurados no sucesso e na recusa. O contexto de execução de reposição conserva o singleton original.
Os direitos apresentados durante a implementação são `purchasing_receipts.view` e `purchasing_receipts.confirm`, ambos de unidade, apenas nas novas fixtures. Não foram adicionados ao catálogo público ou concedidos a contas reais. A política nativa permanece obrigatória, incluindo separação do emissor. O percurso pertence a Compras e usa sessão, CSRF e geração de contexto. A ligação na página de Compras depende da capacidade explícita e do direito na unidade.
Configuração desligada/produção recusam antes de aceder à fonte. Host, porta, bases/roles, cluster, localização e manifesto estão restringidos às composições QA novas. Não se instala ou activa a candidata de Compras no destino.
## Provas dirigidas e reutilização
[Manifesto com resultados e hashes](proofs/receipt-composition-20261103.json): **68 verificações de auxiliares**, não 68 percursos de negócio independentes.
| Grupo | Verificações | Resultado |
| --- | ---: | --- |
| Percurso HTTP SGF | 30 | Prévia sem efeitos, recepção parcial/qualidade, movimento único, histórico, repetição e recusas de contexto, versão, acesso e quantidade cumulativa |
| Concorrência/recuperação | 10 | Dois workers e sessões independentes: mesma chave201/200; intenções diferentes201/409; falha após inserção física, rollback e recuperação |
| Proveniência atómica | 6 | Falha da auditoria desfaz documento/movimento/auditoria original; recuperação sem duplicação; ordem integralmente aceite chega a `complete` |
| Contrato de composição | 4 | Desligado/produção sem SQL; contexto nativo e restauração do host |
| Entrada React | 6 | Capacidade/direito/unidade, desligado e preservação de requisições |
| Demonstração sem consumir decisões | 9 | Perfis, página/script e fingerprint de negócio inalterado |
| Assets compilados servidos | 3 | Página inicial e JS/CSS correspondem ao build privado |
Na regressão, uma ordem recebeu 1 cx/0,75 aceite e mais 1 cx/1 aceite: dois movimentos, 1,75 cx no total, com `quality_pending`. Outro cenário completou 2 cx por quatro recepções de 0,5 cx, incluindo concorrência e recuperação. Estes dados são de regressão; a demonstração continua sem recepções iniciais.
As primeiras21 e depois29 verificações válidas foram conservadas e reutilizadas após corrigir duas expectativas do auxiliar: o validador original devolve422 para armazém de outro tenant antes da verificação de ligação; a tabela nativa de facturas é `invoices`. Não se repetiram as confirmações já aprovadas nem se apagou a execução parcial. As suites gerais, a fila administrativa e a carga anterior não foram repetidas.
Durante a conferência detectou-se alteração paralela ao `GoodsReceiptController` de Compras. Foi preservada; esse controlador não é usado pelo adaptador, que chama directamente o workflow original. O pacote continua fixado na versão testada e o manifesto regista os dois hashes, sem adoptar ou sobrescrever o trabalho alheio.
## Estado, limites e próximo método de trabalho
**Funcionalidade tecnicamente encerrada em QA:** interface SGF até ao histórico com workflow e writer originais. A ordem de entrada é uma fixture emitida; não se declara criação/emissão de ordens pela interface SGF ou repetição de adjudicação/aprovação. A instalação geral de procurement continua separada.
O selector apresenta até100 artigos da origem; pesquisa completa de catálogos maiores permanece pendente. Ordens e histórico têm paginação no servidor. Não se validam carga sustentada, revisão visual, Octane com workers persistentes, separação owner/runtime ou capacidade de implantação. As roles novas são proprietárias somente das suas bases QA; o pacote com namespace próprio é uma composição delimitada.
Sem factura, obrigação, pagamento, lançamento ou ligação stock–custos por consequência da recepção. Seis registos protegidos, cache bloqueada, provas/demonstrações anteriores e configurações/direitos reais preservados. Sem publicação, activação no destino, aceitação presumida ou checkpoint.
Após a orientação do utilizador, as próximas entregas devem concluir conjuntos funcionais e reutilizar provas válidas. Definir contratos entre módulos durante a construção e testar as fronteiras alteradas/percurso completo na ligação. Não substituir conclusão de funcionalidades por novos ensaios de optimização.
+44
View File
@@ -0,0 +1,44 @@
# Recepção: catálogo integral e histórico navegável
03/11/2026. `SGF-RECEIPT-WORKSPACE-COMPLETION-QA-v1`. Completa duas lacunas funcionais da interface de Armazém: escolha de artigos além dos100primeiros e navegação pelo histórico além da primeira página. Reutiliza o workflow físico e o writer existentes, sem acrescentar valorização, dívida ou efeitos financeiros.
## Experimentar em8075
A nova composição mantém o percurso integrado, o selector paginado de fornecedores e o dossiê. [Solicitante](http://127.0.0.1:8075/qa/enter/requester?open=1) prepara uma requisição1UN/100MZN; [chefia](http://127.0.0.1:8075/qa/enter/approver?open=1) aprova; [Compras](http://127.0.0.1:8075/qa/enter/actor?open=1) e [Finanças](http://127.0.0.1:8075/qa/enter/issuer?open=1) seguem propostas/avaliações e adjudicação distinta até à emissão da ordem.
[Armazém](http://127.0.0.1:8075/qa/enter/validator?open=1) abre a ordem efectivamente emitida. Em cada linha, pesquisa código/nome e escolhe individualmente um artigo da mesma unidade e das ligações conhecidas. `QA-CATALOG-0110` é um exemplo além do antigo limite. O histórico permite percorrer páginas e abrir as fotografias originais. Mudar de pesquisa/página limpa a escolha e a prévia; uma resposta atrasada não substitui a escolha mais recente.
A demonstração começa sem requisições principais, ordens ou recepções. Os artigos adicionais são preparação explícita de catálogo QA, não movimentos, associações reais ou decisões já tomadas pela equipa. Três fornecedores, orçamento QA1000MZN e127artigos adicionais preparados; nenhuma localização atribuída.8074 e anteriores permanecem intactas.
## Implementação
- `/api/purchasing-receipts/orders/{id}/lines/{line}/catalogue`: pesquisa literal por código/nome, ordenação código/ID e páginas25ou100 no SQL. Exige o direito existente `purchasing_receipts.confirm`, a autoridade nativa de Armazém e a linha da ordem autorizada. O cliente não escolhe a unidade por parâmetro.
- A unidade segue a comparação nativa, sem conversão: caixa e espaços externos são normalizados. O filtro respeita as ligações conhecidas de catálogo, abastecimento e peça da ordem, recorrendo aos serviços existentes. Serviços não recebem opções de stock. O workflow original continua responsável pela admissibilidade final completa.
- A projecção contém apenas ID, código, nome, unidade e impressão da escolha; não apresenta custos ou valorização. O formulário usa o modelo assíncrono de escolha já testado, sem reescrever esse mecanismo ou seleccionar o primeiro resultado automaticamente.
- O catálogo só é pedido para linhas marcadas para conferência, evitando um pedido inicial por cada linha da ordem. Desmarcar a linha cancela logicamente a pesquisa pendente e limpa a escolha. A fonte final desta alteração foi conferida no servidor; não se declara interacção visual verificada.
- A prévia captura as impressões dos artigos explicitamente indicados, conferindo a impressão enviada pelo formulário quando presente. A confirmação de uma operação nova bloqueia/reconsulta esses artigos e recusa alterações desde a prévia. O metadado de selecção é separado do payload entregue ao writer original.
- Compatibilidade: clientes anteriores podem omitir `item_revisions`; uma prévia nova captura as impressões actuais e a confirmação confere-as. Recepção já registada continua recuperação histórica pelo writer, sem novo movimento. Ligações implícitas que já pertenciam à ordem continuam sob autoridade do workflow nativo; este incremento não cria outras associações.
- `/api/purchasing-receipts/orders/{id}/history`: paginação25 com o direito existente de consulta, preservando origem/unidade. Os controlos do histórico pedem só essa página, sem voltar a carregar progresso, armazéns e catálogo. Detalhes atrasados de outra página não são anexados à página actual.
- O resumo legado `items` da consulta da ordem fica limitado a25 e não representa o catálogo completo. A interface actual usa a pesquisa por linha. As fotografias/históricos imutáveis e o writer físico permanecem os mesmos.
## Provas
[Consolidação](proofs/receipt-workspace-completion-20261103.json):41verificações — fronteira funcional27, guardas4, demonstração6, build/assets3 e fonte final1. As provas anteriores do modelo assíncrono e do percurso integrado foram reutilizadas, sem repetir as suas suites.
O novo ensaio preparou uma ordem pelos workflows existentes para exercer a fronteira alterada. Consultou127artigos compatíveis em páginas25/100, atingiu a escolha além100, excluiu outra unidade/tenant, tratou `%`/`_` literalmente e recusou parâmetros inválidos, linha alheia e perfis sem confirmação física. Nenhum direito novo foi criado.
Alteração do artigo após escolha/prévia foi recusada, sem recepção ou movimento. Um pedido legado com unidade incompatível manteve a recusa pelo workflow original na confirmação; a prévia existente não é apresentada como validação integral desse workflow. Duas confirmações simultâneas da mesma prévia produziram201/200 e um só efeito físico.
O histórico de volume tem27recepções que somam exactamente1UN: duas confirmações pela API alterada (0,010 e0,965UN) e25recepções parciais de0,001UN preparadas directamente pelo **mesmo writer nativo fixado**, somente como fixture de histórico. Não são27novas provas de interface. Páginas25/1 antes da última recepção eram distintas, e o detalhe antigo preservou o artigo/fotografia originais. O pedido legado final concluiu a ordem sem excesso ou duplicação.
Sem facturas, obrigações, pagamentos, contabilização ou localizações criadas por consequência deste incremento. Demonstração e regressão usam bases novas separadas; os ensaios de volume não preenchem o histórico da demo da equipa.
A [matriz conferida](proofs/receipt-workspace-matrix-20261103.json) conserva seis módulos,13estágios e114critérios documentados. A [inspecção estática](proofs/receipt-workspace-flow-20261103.json) encontra76fontes e nenhum ciclo obrigatório, sem ligações a bases. Passaram9verificações de sintaxe PHP,7de JavaScript e `git diff --check`; os totais estáticos não constituem novas provas operacionais.
## Limitações e preservação
Os ensaios completos deste incremento cobrem o caso consumível emUN. Os filtros de abastecimento/peças reutilizam serviços nativos e não constituem nova regressão integral desses percursos. Custos, conversões de unidade, valorização, catálogo real e pagamentos não foram implementados por arrasto.
Pesquisa paginada e27recepções não validam carga sustentada ou implantação. A revisão visual permanece separada, sem repetir o navegador bloqueado. O schema sintético é preparado pelo projecto nativo actual, com runtime fixado ao pacote provado; separação de proprietário/runtime e instalação geral continuam pendentes.
Sem alterações dos seis registos protegidos, da cache bloqueada, das demonstrações anteriores, de acessos/dados reais ou do pacote de Compras instalado. Sem índices no destino, activação, publicação, aceitação ou checkpoint.
+33
View File
@@ -0,0 +1,33 @@
# Histórico detalhado integral da requisição — 03/11/2026
`SGF-REQUEST-HISTORY-CURSOR-QA-v1` remove o limite de consulta aos últimos25 eventos da requisição. A interface passa a percorrer eventos mais antigos/recentes em blocos de25 ou100, mantendo o histórico próprio da etapa e o formulário ainda não gravado.
## Implementação
O detalhe reutiliza a primeira página já carregada. As seguintes usam `GET /api/purchasing-requests/{id}/history`, com `cursorPaginate` e ordenação por ID descendente. A consulta aplica primeiro a origem autorizada e o filtro `ProcessHistory` existente; não materializa o histórico inteiro nem calcula uma contagem global. A implementação de paginação lê apenas o bloco e a entrada adicional necessária para detectar continuação.
Os cursores são cifrados e autenticados, vinculados à requisição, utilizador, perfil/contexto e tamanho do bloco, com validade de dez minutos. Cada consulta volta a verificar direito `purchasing_requests.view`, fonte e contexto actual. Trocar utilizador, requisição, contexto ou tamanho exige começar uma consulta nova. Cursor inválido/expirado tem recuperação explícita por **Actualizar histórico**; não se escolhe outra origem ou se confirma uma operação.
O componente tem protecção contra respostas atrasadas e consulta de um registo entretanto substituído. Actualizar/paginar só altera o painel do histórico: não apaga o formulário da requisição. Sem a flag `receipt_qa.request_history_enabled`, mantém-se a consulta legada dos últimos25 e a guarda do controlador novo recusa antes de consultar dados. Não existem direitos novos. Os blocos de preparação/confirmação da requisição e o filtro de etapas são iguais aos da entrega8079.
## Provas
[Consolidação técnica](proofs/request-history-composition-20261103.json): **36 verificações** —20 API/preservação/guardas,10 de interface com DOM simulado e seis da demonstração.
Na base nova `0fe2284727df`, cluster isolado55439, foram preparados dois rascunhos e125 notas de auditoria QA pelo serviço nativo. A requisição de ensaio tinha127 eventos. Após consultar a primeira página, entrou mais uma nota no topo; a navegação antiga percorreu os127 IDs originais exactamente uma vez. Actualizar passou a incluir128, com páginas100/28. O cursor de regresso mostrou o bloco imediatamente mais recente.
Inclui recusa de cursor de outra requisição/pessoa, tamanho alterado, expiração, geração de contexto nova, módulo/unidade indevidos, direito retirado, fonte estrangeira, parâmetros inválidos e ID zero. Nas sondas directas ao controlador, flag desligada e ID zero recusam sem SQL; esta medição não abrange o middleware de autenticação/contexto. O estado da requisição permanece rascunho/versão1; não há recepção, factura, obrigação ou pagamento criados pelas consultas.
O primeiro harness herdou uma preparação de ordem100MZN anterior à requisição de histórico. Essa fixture sintética foi preservada, identificada pela sequência temporal e removida da preparação de futuras execuções. A asserção final foi corrigida para preservar essa origem existente, em vez de exigir uma base sem ordens. Os17 resultados válidos de paginação/recusas foram reutilizados; não se repetiu esse percurso. As126 notas de auditoria totais são volume de teste assinalado, não126 revisões operacionais da requisição ou decisões reais.
Os dez testes da interface cobrem reutilização da página inicial, cursores opacos, direcção, tamanho, actualização sem perda do formulário, ausência de payload de comando, respostas fora de ordem, mudança de registo e recuperação de erro. As provas anteriores de isolamento dos históricos e dos restantes percursos foram preservadas, com o mesmo `ProcessHistory` e escritores.
Verificação final: sintaxe de oito ficheiros PHP e oito JavaScript aprovada; `git diff --check` sem erros de espaços. Inventário/matriz actualizados: seis módulos,13 etapas,87 fontes, zero ciclos obrigatórios e136 critérios documentais conferidos. Estes números não são testes operacionais adicionais nem validação da aplicação completa.
## Demonstração e limites
Nova composição `92a2386b386b`, [**8080 — Solicitante**](http://127.0.0.1:8080/qa/enter/requester?open=1), sem requisições principais ou volume artificial de histórico. Conserva o percurso integrado, anexos, cartografia e atalhos anteriores. Os probes de leitura preservam requisições, auditoria e concessões da demonstração.
8079 e anteriores, seis registos protegidos, cache bloqueada, provas e trabalho alheio preservados. Sem publicação, activação de Compras, migração/concessão real, aceitação ou checkpoint.
A sequência de eventos permite navegação limitada sem repetição por novas entradas no topo; não é uma fotografia MVCC persistente perante quaisquer escritores externos. O cursor não substitui uma versão de conferência ou aprovação. O DOM simulado e os testes HTTP não constituem revisão visual, acessibilidade ou aceitação no navegador. Não foi repetida a via bloqueada de navegador ou o build React/Vite inalterado: os módulos afectados são ES estáticos. Carga sustentada, instalação geral e capacidade de implantação continuam pendentes.
+39
View File
@@ -0,0 +1,39 @@
# Requisição até à recepção na interface SGF
03/11/2026. Entregue uma nova entrada para preparar, editar, submeter e aprovar requisições na interface SGF, sobre o mesmo núcleo e livro de Compras usados pelas propostas, adjudicação, ordem e recepção. O ID da requisição é preservado no percurso completo. Não há cópia de aprovações nem outra reserva no host.
## Demonstração8068
- [Solicitante](http://127.0.0.1:8068/qa/enter/requester?open=1): preparar rascunho e submeter.
- [Responsável do departamento](http://127.0.0.1:8068/qa/enter/approver?open=1): decidir a requisição e, mais tarde, a adjudicação, segundo as etapas originais.
- [Compras](http://127.0.0.1:8068/qa/enter/actor?open=1): fornecedores/propostas, avaliação, escolha e ordem.
- [Finanças](http://127.0.0.1:8068/qa/enter/issuer?open=1): revisão distinta de fornecedores e avaliação individual de propostas.
- [Armazém](http://127.0.0.1:8068/qa/enter/validator?open=1): recepção e movimento físico.
O contexto principal começa **sem requisições, reservas ou compromissos**, propostas, decisões, ordens ou recepções. Tem orçamento QA aprovado de1000MZN, centro autorizado e três fornecedores preparados na fixture. Um tenant estrangeiro contém dados negativos próprios e não está ligado a este contexto. As entradas automáticas de perfil existem apenas no launcher privado em loopback; demos anteriores preservadas.
Ensaio comprovado: solicitante prepara1UN/100MZN sem imposto, confere a prévia, confirma o rascunho e submete. O núcleo original reserva100MZN uma vez e exige aprovação distinta. A requisição aprovada aparece em propostas sem editar listas de IDs. Seguem-se três propostas100/120/140, seis avaliações, adjudicação aprovada, uma ordem/compromisso100 e uma recepção/movimento1UN. Uma segunda necessidade de50MZN foi rejeitada, libertando apenas a própria reserva. Uma tentativa de1001MZN foi recusada por insuficiência de orçamento.
O formulário suporta até50 linhas de consumíveis, serviços ou outros, com centro, data, fundamento e montantes explícitos. Nenhum preço, imposto, prioridade ou escolha é pressuposto. Equipamentos/peças e respectivos percursos técnicos não são expostos neste recorte.
## Responsabilidade única
O adaptador reutiliza `RequisitionWorkflow`, `InternalRequisitionPort`, o ciclo comum `InternalRequisitions`, as regras originais de `StoreRequisitionRequest` e o orçamento nativo. Os três ficheiros do ciclo comum são fixados por manifesto e verificados antes do carregamento. As alterações do host limitam-se à configuração das novas fixtures; os movimentos do orçamento do host ficam inalterados durante o percurso.
Uma requisição nova fica admitida pelo contexto de empresa/unidade registado em `sgf.request.command`; as consultas seguintes a propostas, ordens e recepções verificam essa origem. Não se estabelece equivalência automática entre empresas/unidades. A API mantém funções nativas e direitos do host, com separação solicitante, aprovação, Compras, Finanças e Armazém.
Prévia executa o comando original em savepoint com rollback. Pode avançar sequências, mas não persiste requisições, reservas, avisos internos ou decisões; omite IDs temporários na criação. Confirmação revalida direitos, contexto, manifesto, validade e revisão, executa o comando e grava a origem SGF na mesma transacção. Falhar o recibo desfaz também o recibo nativo, linhas e auditoria. Repetição exacta recupera o resultado; outra carga com a mesma chave é recusada. Versões antigas exigem nova conferência. O histórico nativo é preservado e a interface mostra os25 eventos mais recentes por requisição.
Novos direitos de unidade, apresentados antes da preparação: `purchasing_requests.view/prepare/submit/approve`, exclusivamente QA. Não se alterou o catálogo público nem se concederam acessos reais. Novas identidades distintas permitem que a revisão de fornecedores por Finanças e a aprovação de requisições/adjudicações pelo departamento coexistam na mesma composição.
## Provas e limitações
[Prova consolidada](proofs/request-to-receipt-composition-20261103.json): **103 verificações** —30 da nova entrada,47 da integração até à recepção, três das guardas, seis da navegação,11 da demo, três do build/assets e três da fixação do pacote. Inclui dois workers201/200, recuperação após falha, permissões revogadas, versões antigas, acesso estrangeiro, reserva/libertação únicas e orçamento do host inalterado.
Entre a preparação QA e a demo surgiram alterações simultâneas no repositório de Compras, incluindo os workflows de ordens/recepções. Não foram alteradas ou desfeitas. A cópia inicialmente observada pela demo foi preservada em separado no directório privado; a demo passou a usar exactamente o pacote nativo testado em QA, mantendo as bibliotecas económicas e do ciclo comum fixadas. Uma prova adicional confirmou a integridade e a leitura do contexto vazio após a fixação. Esta identidade de código não valida implantação ou equivalência de todos os esquemas da base.
O primeiro teste encontrou um nome de tabela incorrecto no próprio verificador, antes dos comandos. Corrigiu-se para `cb_budget_entries`. O runner passou a exigir a prova da requisição concluída antes de iniciar a prova dependente. Na integração, o teste de repetição usava a identidade de Finanças para uma prévia do departamento; a aplicação recusou correctamente. Preservaram-se as37 verificações válidas e retomaram-se as10 restantes com a identidade correcta. A consulta de repetição usou um envelope QA reconstruído do recibo exacto; não se repetiu a decisão de negócio. Suites anteriores de fornecedores e módulos financeiros foram reutilizadas.
**Requisições antigas `ir_requests` não foram convertidas.** Já têm autoridade/reserva no host; a sua passagem exige um protocolo próprio de responsabilidade financeira e recuperação entre bases. Este incremento resolve o percurso de requisições novas, sem simular essa migração ou libertar saldos antigos.
Permanecem separados anexos, catálogos/equipamentos técnicos completos, regimes formais, correcções posteriores e instalação geral. Revisão visual, carga sustentada e capacidade de implantação continuam pendentes. Não houve ligação ao destino, alteração dos seis registos protegidos/cache/demos anteriores, migração/concessão real, activação de Compras, publicação, aceitação ou checkpoint.
@@ -0,0 +1,38 @@
# Requisições ligadas à composição QA do SGF — 03/11/2026
`SGF-REQUISITION-COMPOSITION-QA-v1`: código funcional de integração, sem instalar ou activar Compras no destino. A árvore principal SGF passa a saber montar o adaptador/interface existente num pacote QA com manifesto fixado. Não há segundo motor de requisições ou orçamento.
## O que ficou ligado
- `InternalRequisitionQa` confere o ambiente `budget-testing`, host/porta, nome e role exclusivos, identidade física do cluster e ausência de privilégios elevados. Confere também a localização privada e os dez ficheiros do pacote pelo manifesto SHA-256 antes de carregar o adaptador.
- A configuração fica desactivada por defeito. Presença de um ficheiro ou pacote, por si só, não activa a integração. O arranque monta rotas; não instala schema, cria dados ou concede direitos.
- As rotas existentes conservam sessão, CSRF, contexto e permissões. A navegação reconhece a pertença a Compras; leituras com token antigo e módulo incorrecto são recusadas.
- A página de Compras recebe uma capacidade explícita do servidor e só apresenta a ligação se o utilizador tiver consulta na unidade actual. O ecrã reutilizado tem retorno à navegação SGF.
- Requisição de 100 MZN → submissão → reserva única no orçamento comum → aprovação distinta → consulta/histórico. Repetições recuperam o mesmo efeito; não há consumo, factura, pagamento ou lançamento por arrasto.
Os dez ficheiros distribuídos são idênticos aos da fonte de Compras e aos ficheiros actualmente presentes no pacote da8039, conferidos por leitura. A versão instalada `packages/purchasing/current.json` continua0.1.1, com o manifesto anterior. Não se copiavam alterações de identidade/administração da candidata para a instalação principal; o catálogo público de direitos e as concessões existentes não foram alargados.
## Provas dirigidas
[Manifesto público com hashes e resultados](proofs/requisition-composition-20261103.json): **50 verificações**, contando apenas as versões finais de cada prova, sem somar resultados sobrepostos.
| Prova | Verificações | Resultado |
| --- | ---: | --- |
| Novo percurso HTTP da composição |17| Uma requisição, uma reserva100 MZN, revisão distinta, repetição sem duplicação, versão/contexto antigos e direito revogado recusados |
| Fronteiras de configuração/pacote |16| Desligado não monta rotas; produção, host/porta/role/schema/URL incompatíveis, manifesto alterado, ficheiro alterado, contrato incompleto e travessia de caminho recusados; zero SQL nestas recusas |
| Navegação/snapshot HTTP |11| Capacidade coincide com configuração, ecrã200/404 conforme composição, retorno SGF, leitura autorizada, CSRF419 e anónimo401; fingerprint de negócio/direitos inalterado |
| Renderização React dirigida |6| Ligação depende de capacidade booleana, direito e unidade; sem navegador/revisão visual |
Base nova `budget_core_sgf_63b7b6590748`, role restrita `ir_composition_63b7b6590748`, cluster QA55439 já autorizado. A role é proprietária desta base nova; **a prova não valida separação owner/runtime de uma implantação**. Os direitos funcionais usados já pertencem ao recorte de requisições/orçamento e foram escritos apenas na fixture nova. Nenhuma ligação ou migração nas bases das demonstrações ou da Tempo.
A primeira preparação encontrou falta de `composer.json` na cópia QA; corrigiu-se o auxiliar. A tentativa seguinte encontrou um nome errado da tabela no auxiliar de asserção, depois da submissão. Conservou-se essa execução parcial (`0fbff4f9f5db`), sem reset; a prova corrigida correu na base nova acima. A regressão de negócio passou uma vez; os complementos de segurança/navegação foram ampliados separadamente, preservando também os resultados anteriores. Não se repetiram suites gerais, ensaios de carga ou provas aceites da8039.
Os provisionadores e saídas privadas não exportam credenciais. O launcher recusa outro cluster físico e não aceita retomar/recriar uma base existente. Os ficheiros de resultados concluídos são preservados.
## Estado e limites
A lacuna anterior de composição na árvore principal foi tratada **para QA**. A instalação principal permanece desactivada. A8039 conserva a sua configuração/dados e âmbito próprios; este ensaio não a substitui nem lhe atribui os resultados de outra base.
A interface SGF de recepção continua pendente: deve reutilizar a autoridade de recepção de Compras e o writer comum, incluindo ordem, recebedor, qualidade, quantidades cumulativas, artigo/armazém e auditoria. Esta entrega não a simula com um movimento directo nem declara todo o procurement integrado.
As provas anteriores de isolamento/concorrência/recuperação do núcleo mantêm o seu âmbito; estas50 verificações não são uma repetição integral da regressão multiempresa. Revisão visual, carga sustentada, separação SQL de implantação, instalação e capacidade de implantação permanecem separadas. Seis registos, cache bloqueada, demos, trabalho alheio e direitos reais preservados. Sem publicação, activação de candidata no destino, aceitação ou checkpoint presumidos.
@@ -0,0 +1,52 @@
# Pagamentos e afectações SGF — histórico paginado
Continuação posterior: [consulta SGF separada dos bloqueios de escrita](SGF_SETTLEMENT_READ_ISOLATION_DELIVERY.md). O limite de autorização com bloqueios descrito no final corresponde ao estado desta entrega inicial; a continuação preserva os seus dados e provas, sem repetir as medições.
02/11/2026 — `SGF-SETTLEMENT-PAGED-READ-SIM-v1`. Implementação local sintética, continuação da [ligação entre origem e selecção financeira](SGF_PAYABLE_EVIDENCE_FOCUS_DELIVERY.md). Fecha a leitura integral do livro de pagamentos na composição SGF de ensaio; não activa operações reais nem altera o cálculo ou os comandos financeiros.
## Comportamento entregue
`SupplierSettlements::listingPage()` fornece quatro janelas independentes, ordenadas por ID decrescente: pagamentos, propostas de afectação, afectações confirmadas e eventos. Páginas de 25/100, contagens e filtros na base. Os parâmetros são `payments_page`, `allocation_proposals_page`, `allocations_page`, `payment_events_page`, `payment_per_page`, `payment_q` (referência literal), `payment_state` (`all/proposed/confirmed/rejected`) e `payment` (ID exacto no contexto).
A selecção de pagamentos por estado/referência/ID é aplicada antes da paginação e, por subconsulta, também às propostas, afectações e eventos desses pagamentos. Não se carregam todos os IDs correspondentes para a memória PHP. `%` e `_` são caracteres literais na pesquisa. Página fora dos limites do resultado devolve janela vazia, sem regressar à leitura integral. Parâmetros desconhecidos, contexto injectado, IDs/estados/páginas inválidos recusam 422; pagamento indisponível no contexto recusa 403.
As decisões são lidas em conjunto para os pagamentos/propostas da página. **Por afectar** usa a soma de todas as afectações e reversões dos pagamentos apresentados, e não apenas das afectações que aparecem na janela. Propostas/decisões de reversão são carregadas para as afectações da página, com a origem correspondente lida conjuntamente no mesmo âmbito. O histórico preserva as afectações originais revertidas; não as omite nem as abate duas vezes.
A interface tem filtros e paginação para cada lista. Propostas, afectações e eventos permitem abrir o pagamento de origem mesmo quando este está fora da primeira página. Afectações ligam à evidência documental e ao reconhecimento. Os controlos conservam os filtros independentes de documentos e pagamentos; sair do foco de uma origem preserva o filtro de pagamentos. Seguir um link não concede autoridade de confirmação.
O SGF selecciona expressamente o novo leitor no controlador comum. A composição nativa conserva `listing()` e o contrato anterior, sem substituir o pacote instalado, activar candidatas ou acrescentar configurações reais. A disponibilidade continua limitada às guardas de ambiente/schema do ensaio. Nenhum direito novo foi criado: reutilizam-se `supplier_payables.view`, `pa_access` e a autoridade financeira existente.
## Ensaio comparável
Base/role novas no cluster isolado 55439, distintas de todas as provas/demonstrações anteriores.61 obrigações de origens sintéticas explícitas reconhecidas com preparação/validação distintas. Um pagamento de 1,00 MZN,60 afectações de 0,01 MZN e uma reversão integral de 0,01 MZN foram registados pelos comandos existentes. Montante por afectar: **0,41 MZN**, incluindo a reversão antiga que não está na primeira página de afectações.
Para volume,999 pagamentos são cópias sintéticas declaradas, com referências distintas e estados proposto/confirmado/rejeitado. Não equivalem a 999 workflows completos de compra/pagamento. Total: 1.000 pagamentos, 336 propostas, 393 afectações e 1.008 eventos. O recibo histórico copiado do ensaio anterior permanece íntegro e separado das novas origens sintéticas não históricas.
| Estratégia | Tempo ms | Consultas | Pico heap PHP MiB | Pagamentos / propostas / afectações / eventos |
|---|---:|---:|---:|---:|
| Integral anterior | 2.236,559 | 3.038 | 30 | 1.000 / 336 / 393 / 1.008 |
| Janelas de 25 | 36,520 | 35 | 24 | 25 / 25 / 25 / 25 |
| Janelas de 100 | 42,644 | 35 | 24 | 100 / 100 / 100 / 100 |
| Pagamento original em foco | 28,562 | 36 | 24 | 1 / 3 / 25 / 9 |
Os SHA-256 das quatro janelas de 25/100 são iguais aos recortes correspondentes do leitor anterior, normalizando a ordenação e excluindo apenas a nova referência navegável `local_source_id`. A posição completa do pagamento original também é igual;0,41 MZN não é calculado pelas 25 afectações visíveis. A terceira página mostra as 10 afectações antigas restantes e a reversão original, sem mudar esse valor.
Condições: PHP 8.4.27, 512M, processo independente por estratégia, aquecimento igual pela consulta do pagamento original, mesma base e sequência integral → 25 → 100 → foco. Uma amostra por estratégia; outros processos locais não controlados. Memória é heap alocado, não RSS; o framework já tinha 24 MiB alocados. Zero pico adicional numa página não significa memória zero. **Nenhum índice foi criado ou experimentado**; o ganho observado combina janelas limitadas e leitura conjunta. Não se isolou o contributo de cada técnica.
Este ensaio mede 1.000 pagamentos de liquidação. Não substitui nem repete as medições anteriores de 1.000/5.000/10.000 documentos de origem SGF ou nativos; os universos e as dependências são diferentes.
## Verificações e preservação
- Seis cenários novos, 53 asserções: janelas independentes/disjuntas, ordenação, totais, filtros nos pais/filhos, pesquisa literal, soma integral com reversão fora da página, origem recuperável e janelas vazias.
- Isolamento exercitado com pagamento e filhos de outra unidade, incluindo uma afectação estrangeira que referencia o pagamento local: não entra na soma, contagem ou resposta. Direito de consulta revogado recusa acesso apesar do direito documental geral.
- Uma leitura anterior não permite confirmar proposta antiga: uma nova reversão actualiza o ciclo; a confirmação antiga recusa e não grava decisão. Falha injectada durante a leitura desfaz a transacção do leitor e a consulta seguinte recupera sem reparação.
- 29 verificações HTTP pelo kernel real: quatro janelas, filtros, foco antigo, 100 registos, 422/403/409, CSRF 419, decisão recusada ao leitor, links/formulários, escape HTML e `no-store`. Um complemento dirigido verificou que sair da origem preserva o filtro e a página de pagamentos. Servidor temporário loopback 8047 encerrado; nenhum navegador usado.
- Pós-ensaio só de leitura confirmou o fingerprint financeiro integral igual ao baseline após a preparação do volume. Todos os comandos de alteração nos testes foram revertidos; os dados sintéticos preparados ficam conservados na base própria. As provas anteriores foram reutilizadas e conferidas por hash, sem repetir suites alheias, benchmarks ou resets. Sintaxe PHP/JavaScript e diferenças verificadas.
Manifesto: [resultados, condições e hashes](proofs/sgf-settlement-paged-read-20261102.json). Preparação explícita: `scripts/settlement-page-run.mjs` cria nova base/role e cenário; fases nomeadas não sobrescrevem provas concluídas. Medição: `scripts/settlement-page-bench.mjs <tag>` reutiliza medições existentes. HTTP: `scripts/settlement-page-http.mjs <tag>`. Consolidação sem repetir trabalho: `scripts/summarize-settlement-page.mjs <tag>`. Settings, credenciais, cookies e logs permanecem privados.
## Limites separados
A consulta de liquidação conserva os bloqueios de autorização existentes no tenant/empresa e actor. Não se demonstrou melhoria de contenção, concorrência sustentada ou capacidade de implantação. Contagens e filtros ainda fazem trabalho na base sobre os registos correspondentes; uma dependência documental individual pode ser grande. A fotografia é por pedido, sem instantâneo congelado entre páginas visitadas por uma pessoa. Comandos continuam a revalidar saldos, versão/ciclo, independência, permissões e contexto actuais.
Não se acrescentou fornecedor histórico SGF vivo, cutover operacional, execução bancária, reconciliação ou contabilidade. Seis registos protegidos, cache bloqueada, direitos/dados reais, demonstrações e trabalho alheio preservados. Sem migração no destino, activação de Compras, publicação, aceitação ou checkpoint presumidos. Revisão visual, carga sustentada e implantação permanecem pendências distintas.
@@ -0,0 +1,51 @@
# Consulta de liquidação SGF separada dos bloqueios de escrita
02/11/2026 — `SGF-SETTLEMENT-READ-ISOLATION-SIM-v1`. Continuação local sintética do [histórico paginado](SGF_SETTLEMENT_PAGED_READ_DELIVERY.md). Remove da consulta paginada SGF os bloqueios de escrita da empresa/utilizador; preserva a autoridade, os bloqueios e a conferência actual dos comandos.
## Implementação e contrato
O núcleo aceita uma autorização opcional e específica para a leitura paginada de pagamentos. O adaptador SGF fornece a mesma verificação existente de actor autenticado, contexto exacto, pessoa e direitos `view/payments_view`, usando o ramo sem bloqueio. Não se criou uma concessão paralela nem se concederam direitos novos.
`SupplierSettlements::listingPage()` usa esse callback apenas na consulta. `command()` conserva o callback original de escrita; `listing()` e construtores sem o argumento novo conservam também a autorização anterior. O callback de leitura nunca autoriza uma decisão. O pacote instalado da composição nativa não foi substituído ou activado, e essa composição não optou automaticamente pelo novo contrato.
Quando é dona da transacção, a consulta paginada inicia `REPEATABLE READ READ ONLY`. O controlador SGF inicia igualmente uma única transacção desse tipo para a leitura completa de pagamentos, posições documentais, propostas exactas e referências. Todas essas listas partilham o mesmo instantâneo do pedido. Uma leitura dentro de uma transacção já existente participa nela; não tenta mudar o isolamento depois de já haver consultas. O percurso HTTP efectivo foi verificado como transacção própria só de leitura.
Não se alteraram os cálculos de principal, afectações, reversões ou saldo. As confirmações continuam a obter os bloqueios e a conferir os factos/versões/ciclo actuais. A identidade capturada na construção do motor é comparada novamente na consulta; direitos revogados, pessoa alterada ou actor trocado não são herdados da construção anterior.
## Concorrência efectivamente observada
Reutilizada a base sintética própria da entrega anterior, com 1.000 pagamentos, sem reset ou novas operações persistentes. Uma transacção principal bloqueou a linha de `companies` e preparou/confirmou, sem commit, uma reversão adicional pelos comandos comuns. Dentro dessa transacção, o montante por afectar passaria de 0,41 para 0,42 MZN.
Três processos PHP/ligação independentes exercitaram os percursos:
| Percurso | Enquanto o escritor mantém o bloqueio | Depois da libertação |
|---|---|---|
| Consulta paginada pelo controlador SGF | Termina em **357,581 ms**, sem `FOR UPDATE`, com `repeatable read/read_only=on`; vê 0,41 MZN e os nove eventos confirmados | Nenhuma alteração de dados |
| Consulta integral anterior, pela mesma autorização de escrita | Aguarda em `companies FOR UPDATE` | Conclui com 0,41 MZN; conserva os dois bloqueios de escrita anteriores |
| Confirmação de proposta sintética de afectação | Aguarda em `companies FOR UPDATE` | Revalida e conclui; a repetição da mesma chave recupera a mesma decisão, com exactamente uma decisão e uma afectação para o destino |
`pg_blocking_pids` e `pg_stat_activity` identificaram a cadeia até à transacção principal. Um processo esperava no `transactionid`; o outro podia esperar no `tuple`, atrás do primeiro concorrente. A ordem variou com a chegada dos processos. O diagnóstico inicial exigia incorrectamente que ambos tivessem o pai como bloqueador directo; a prova final segue também a ligação indirecta da fila, sem confundir essa espera com outro recurso ou outra autorização.
A consulta nova terminou enquanto **ambos os outros processos ainda estavam bloqueados**. Não observou a reversão por confirmar. O pai libertou o bloqueio por rollback; a confirmação posterior decorreu dentro de outra transacção externa, igualmente revertida depois de conferir o resultado e a repetição. Assim, a proposta sintética de afectação original mantém-se pendente e não foi efectuada qualquer decisão de pagamento histórico importado.
Os tempos totais dos processos antigos incluem a espera, e a consulta integral lê um universo diferente do foco paginado. **Não são um comparativo controlado de velocidade por página**, throughput ou capacidade. O resultado demonstrado é a independência da consulta perante esse bloqueio de linha, com escrita ainda serializada e revalidada.
## Provas dirigidas e recuperação
- Quatro cenários novos, **23 asserções**: transacção própria coerente/só de leitura; ausência de `FOR UPDATE`; modo de leitura não persiste na ligação; contrato antigo mantém os dois bloqueios; callback de leitura não autoriza comandos; direitos/pessoa/actor alterados recusados.
- Reutilizados os SHA-256 das quatro janelas de 25/100 e da posição original da entrega anterior. Igualdade confirmada; os benchmarks anteriores não foram repetidos. Não se acrescentam novas medições de memória, índices ou volumes nesta entrega.
- Tentativa injectada de inserir um evento dentro da consulta: PostgreSQL recusa com `25006`, a transacção é desfeita e a leitura seguinte recupera normalmente. Nenhum evento foi gravado.
- **11 verificações HTTP reais**, dirigidas à mudança: ausência de autenticação401, JSON e HTML com isolamento/só-leitura e zero `FOR UPDATE`, posição original, contexto obsoleto409, foco indevido403, confirmação recusada ao leitor403, CSRF419 e `no-store`. A instrumentação é exclusivamente do router QA privado. Servidor loopback8047 encerrado; não houve navegador.
- Pós-ensaio só de leitura confirmou o fingerprint financeiro integral anterior: fontes, propostas, obrigações, pagamentos, decisões, afectações, reversões, eventos, comandos e direitos iguais. A decisão da proposta pendente continua ausente. Sequências podem avançar pelas inserções revertidas; não foram repostas para ocultar o ensaio.
Manifesto: [resultados, condições e hashes](proofs/sgf-settlement-read-isolation-20261102.json). Inclui conferência dos hashes de **todos os artefactos privados registados na prova anterior**, sem a sobrescrever. Execuções diagnósticas não são contadas como aprovadas. A comparação inicial entre posições foi corrigida para comparar os valores serializados, em vez da identidade de objectos PHP distintos; o cálculo não mudou.
Reprodução dirigida com PHP fixado: `scripts/payable-history-sgf-proof.php <settings QA privado> settlement-read-race`, `settlement-read-cases` ou `settlement-read-post`. Cada prova concluída é preservada, sem sobrescrita automática. HTTP: `scripts/settlement-read-http.mjs <tag>`. Consolidação sem repetir testes: `scripts/summarize-settlement-read.mjs <tag>`. Guardas exigem a base/role próprias do cluster55439; credenciais, sessões, entradas e logs permanecem privados.
## Limites preservados
Os direitos e os factos são conferidos no instantâneo de cada pedido. Uma revogação que ocorra depois desse instantâneo será observada pelos pedidos seguintes; não há fotografia congelada entre páginas visitadas por uma pessoa. As decisões continuam a conferir o estado actual no seu percurso de escrita.
Leitura normal continua sujeita aos recursos e bloqueios gerais da base, incluindo DDL; não se garante ausência absoluta de espera. Não foi medida carga sustentada, contenção entre muitas empresas ou capacidade de implantação. A prova não altera o conjunto de medições anteriores de documentos ou pagamentos nem autoriza instalar índices.
Sem novas rotas operacionais, direitos, migrações no destino, activação de Compras, pagamentos reais, fornecedor histórico SGF vivo, cutover financeiro, reconciliação, contabilidade, publicação ou checkpoint. Seis registos protegidos, cache bloqueada, demonstrações e trabalho alheio intactos. Revisão visual e implantação permanecem pendências separadas.
+56
View File
@@ -0,0 +1,56 @@
# Propostas até à recepção no SGF — bloco funcional QA
03/11/2026. Entregue a interface de **propostas → avaliações individuais → comparação → escolha fundamentada → aprovação distinta da adjudicação → ordem → recepção → movimento e histórico**, reutilizando os controladores e serviços originais de Compras. Não há selecção ou pontuação inventadas pelo adaptador.
## Demonstração disponível
Nova composição8066. Começa com uma requisição sintética aprovada de1UN/100MZN, reserva100MZN e três fornecedores fictícios de origem. **Não começa com propostas, avaliações, adjudicação, ordem, recepção ou movimento.** São decisões que a equipa pode experimentar.
- [Compras](http://127.0.0.1:8066/qa/enter/actor?open=1): registar propostas, avaliar individualmente, escolher e submeter adjudicação; emitir depois da aprovação.
- [Avaliador/conferente](http://127.0.0.1:8066/qa/enter/issuer?open=1): avaliar propostas e decidir a adjudicação por identidade distinta.
- [Armazém](http://127.0.0.1:8066/qa/enter/validator?open=1): receber apenas depois de existir ordem emitida; sem consulta económica ou adjudicação.
Percurso sugerido para reproduzir o ensaio: Compras regista as três propostas, com preços100/120/140MZN e sem desconto, e faz as suas avaliações. O conferente avalia cada uma individualmente. As notas8/5/8 usadas nos testes são apenas valores de ensaio, não estão preenchidas automaticamente. Compras volta a conferir a comparação, escolhe expressamente uma proposta elegível do topo e fundamenta a adjudicação. O conferente aprova ou recusa. Depois Compras emite a ordem e Armazém recebe a mercadoria.
Os formulários também permitem os tipos de desconto já suportados pelo motor original. Quantidades e linhas vêm da requisição; não são redigitadas. Campos de avaliação, fornecedor, escolha e decisão começam por preencher. A comparação incompleta permanece visível, sem tratar avaliações ausentes como zero. O histórico completo tem paginação de25 registos no servidor e consulta da evidência anterior/posterior.
Entradas automáticas de perfil existem somente no launcher privado em loopback.8064/8065 e demonstrações anteriores são preservadas. Cookie, armazenamento e bases desta entrega são próprios.
## Reutilização e confirmação
`SourcingController` chama os métodos originais de `QuotationController` para registo/avaliação e `PurchaseWorkflow` para selecção/decisão. Preço, desconto, imposto documental de ensaio, elegibilidade, pontuação, conflitos, aprovações e orçamento continuam sob as regras originais. As bibliotecas económicas e o pacote de namespace permanecem fixados por manifesto. Não foi criada outra autoridade para orçamento ou stock.
Cada operação exige prévia e confirmação individual. A prévia chama o comando original num **savepoint de rollback obrigatório**: a validação e os montantes apresentados são os mesmos do circuito nativo, sem duplicar fórmulas. Todos os registos temporários, auditoria e alterações de reserva são desfeitos antes de devolver a prévia. **Sequências PostgreSQL podem avançar**, gerando lacunas de IDs; não se promete ausência de SQL de escrita ou numeração contínua. Não se atribui identificação documental temporária na interface. Esta técnica está limitada às bases QA guardadas e aos comandos seleccionados sem envio externo.
A confirmação revalida direitos/contexto, prazo e revisão, executa novamente o comando original e grava o resultado idempotente em auditoria append-only, na mesma transacção. O recibo inclui operador/contexto SGF, versões de origem, chave, hash do conteúdo e resultado. Falhar esse recibo desfaz também a proposta e a auditoria nativa. Repetir a mesma chave/conteúdo recupera o resultado; outro conteúdo é recusado. Uma prévia adulterada, outra origem ou uma revisão desactualizada não confirma.
Os direitos `purchasing_sourcing.view/prepare/evaluate/select/approve` são de unidade e foram concedidos apenas nas novas fixtures. As funções nativas também são verificadas. O preparador não aprova a própria adjudicação; a janela de propostas/avaliações fecha quando a adjudicação existe. Repetir um comando já confirmado continua a consultar o resultado original, sem reabrir essa janela. Após dez minutos, consultar o histórico quando a prévia tiver expirado.
A adjudicação nova fica disponível para ordens através da ligação explícita à requisição de origem; não se edita uma lista de IDs depois da criação. A emissão e a recepção usam os percursos já entregues. Não há associação automática de registos antigos a módulos.
## Provas e correcção do arranque
[Manifesto com resultados e hashes](proofs/sourcing-composition-20261103.json):74 verificações de auxiliares, não74 percursos de negócio distintos.
| Grupo | Verificações | Evidência |
| --- | ---: | --- |
| Percurso integrado HTTP |47| Três propostas, seis avaliações, comparação nativa, escolha, aprovação, ordem, recepção e histórico; acesso, revisão, falha, repetição e dois workers |
| Guardas de activação |3| Contrato do adaptador desligado/produção recusado antes de SQL |
| Integridade do carregador |6| Código conhecido executa; alterado, ausente e travessia recusados antes de execução; outros namespaces preservados |
| Demonstração sem consumir decisões |9| Capacidades exactas, páginas/scripts e fingerprint canónico inalterado |
| Navegação React |6| Capacidade, direito, unidade e preservação de ordens/recepções |
| Build servido |3| Página inicial e JS/CSS correspondem ao build privado |
A regressão produziu exactamente3 propostas,6 avaliações,1 adjudicação/decisão aprovada,1 ordem,1 compromisso100MZN,1 recepção e1 movimento físico. A regra de três propostas/dois avaliadores não pôde ser contornada. A escolha não ocorreu automaticamente. Confirmar duas vezes ou em dois workers deixou um único resultado. Uma falha injectada no recibo SGF desfez proposta, linhas e auditorias; retirada a causa, a mesma intenção concluiu correctamente.
A primeira leitura da demonstração atingiu30s no verificador que relia todos os ficheiros do pacote, antes do workflow. A tentativa e o timeout do auxiliar foram preservados. O manifesto continua fixado; cada classe é agora verificada por caminho e SHA256 **antes de ser carregada**, incluindo dependências ainda não utilizadas. A conferência integral do artefacto também consta do manifesto de entrega. Não se aumentou o limite para converter a falha em sucesso. As seis provas do carregador e a consulta final da demonstração passaram; o percurso de negócio47 já válido não foi repetido por esta correcção.
As provas anteriores dos motores, ordens e recepções foram reutilizadas. Sem suites gerais, repetição da fila administrativa ou novos ensaios de carga nesta entrega.
## Fronteiras que permanecem
A entrada ainda é uma **requisição nativa sintética aprovada** com cadastro de fornecedores preparado. A passagem das requisições internas SGF para essa origem, sem reserva/orçamento duplicados, tem de conservar o seu contrato próprio. A preparação/validação do cadastro de fornecedores na interface SGF, regimes formais de concurso e revisões/cancelamentos posteriores não são declarados entregues aqui.
O orçamento canónico da origem é o único que recebe reserva/compromisso deste percurso; não se copia o efeito para o orçamento do host. O selector mostra até100 fornecedores explicitamente configurados. O cenário financeiro é de ensaio, com imposto zero, sem validação de fiscalidade ou critérios reais de cliente.
Revisão visual, carga sustentada, implantação, separação owner/runtime e workers persistentes continuam pendentes. As roles novas são proprietárias apenas das suas bases QA. Sem factura, pagamento, contabilização ou integração stock–custos por arrasto, publicação, activação de Compras no destino, aceitação presumida ou checkpoint. Seis registos protegidos, cache bloqueada, provas válidas, dados/acessos reais e trabalho alheio preservados.
+37
View File
@@ -0,0 +1,37 @@
# Compras → consulta de Stock na composição QA — 03/11/2026
`SGF-STOCK-COMPOSED-SOURCE-QA-v1` liga a consulta de Stock ao livro físico da demonstração integrada de Compras. Uma recepção confirmada pelo workflow original passa a ser observada no Stock do mesmo host, sem copiar movimentos, saldos ou criar outro escritor.
## Entrega
O adaptador `CompositionStockRead` reutiliza `InventoryReader` e `InventoryReadSession`. O controlador antigo mantém o percurso anterior quando a nova opção, desactivada por omissão, não está ligada. A interface React de Stock, os menus e a navegação aceite permanecem inalterados.
O novo perfil de armazém QA recebe apenas o direito existente `stock.view`, na sua empresa/unidade. A concessão foi apresentada antes de ser aplicada à fixture. Uma conta técnica distinta possui SELECT apenas sobre artigos, armazéns e movimentos; não recebe acesso a recepções, auditoria ou obrigações. Nenhum direito real foi alterado.
O adaptador verifica ambiente, bases, utilizadores técnicos, cluster físico, perfil privado e correspondência pessoa/empresa/unidade/armazéns. Mantém bloqueios partilhados sobre a autoridade do host durante a leitura; contenção tem limites SQL de dois segundos para bloqueios e três para instruções. A consulta física usa uma transacção própria REPEATABLE READ/READ ONLY, sem adquirir o mutex de escrita nativo.
Os tokens de consulta incluem pessoa, contexto de sessão, filtros, origem física e mapeamento. Mudanças exigem actualização. O livro físico tem um trigger append-only criado exclusivamente nas duas bases QA novas, para tornar efectiva a premissa usada pela revisão count/max do leitor. Catálogo e armazéns continuam a ter impressões próprias. Não se instalou este trigger no destino nem nas demonstrações anteriores.
## Provas
[Prova consolidada](proofs/stock-composed-source-20261103.json): 41 verificações novas, 31 da integração HTTP/SQL e dez da demonstração/guardas. Duas guardas chamam directamente o adaptador; não são provas de middleware.
A preparação mínima percorreu requisição/propostas/adjudicação/ordem pelos workflows efectivos. A fronteira alterada confirmou uma recepção de 1 UN, recuperou a mesma confirmação sem duplicação e observou o mesmo ID de movimento e quantidade exacta `1000` no Stock. Não criou factura, obrigação ou pagamento.
Foram verificados páginas de 25/100, catálogo além de 100, pesquisa literal, projecção sem fotografia financeira, isolamento de módulo/unidade/armazém, revogação de permissão, contexto antigo, revisão após novo movimento, conta SQL sem escrita/acesso financeiro, falha de autenticação da origem e recuperação. A leitura terminou mesmo com o mutex de escrita nativo retido. Uma retenção do direito no host devolveu 503 limitado e recuperou após libertação.
A primeira tentativa parou numa asserção demasiado restrita de recusa: o contexto Compras devolveu 409 antes da conferência de Stock, em vez de 403. A preparação já concluída foi recuperada sem emitir outra ordem. O resultado final contém as 31 verificações aprovadas. Não se repetiram suites anteriores nem se somaram as suas contagens.
## Demonstração
Nova composição isolada em **8083**, inicialmente sem requisições principais, recepções ou movimentos. Entrada: <http://127.0.0.1:8083/qa/enter/validator?module=stock&open=1>; no menu Stock, abrir **Existências**. O mesmo perfil pode entrar explicitamente em Compras para recepcionar e regressar ao Stock. A consulta não troca de módulo automaticamente.
As provas HTTP confirmaram a página inicial, o bundle servido, a sessão e a origem vazia autorizada. As consultas preservaram artigos/armazéns/movimentos/auditoria/concessões. A base de regressão contém o percurso de prova; a demonstração permanece vazia para a equipa trabalhar.
## Limites
O catálogo é do tenant de origem; armazéns e movimentos são apenas dos armazéns mapeados. Não foram acrescentadas reservas, bloqueios, disponibilidade calculada, valorização, custos, ligações de oficina ou efeitos financeiros. A evidência documental completa continua no percurso autorizado de Compras.
Revisão visual, acessibilidade, carga sustentada, compatibilidade de instalação e capacidade de implantação continuam pendentes. O bundle servido não constitui prova visual. As guardas mantêm esta composição exclusivamente sintética; não há ligação operacional instalada.
Preservados os seis registos sem associação, a cache bloqueada, provas, checkpoints, demonstrações anteriores e trabalho alheio. Sem publicação, activação de Compras, migração no destino, concessão real, aceitação ou checkpoint presumido.
+39
View File
@@ -0,0 +1,39 @@
# Relatório físico de Stock por período — 03/11/2026
`SGF-STOCK-PERIOD-REPORT-QA-v1` disponibiliza um resumo físico no submenu **Stock → Relatórios → Movimentos de stock**. Para cada artigo/armazém apresenta abertura, entradas, saídas, fecho e número de movimentos no período. Reutiliza o livro e a conta SELECT-only já ligados à composição QA, sem outra tabela de saldos ou escritor.
## Regra do relatório
O período é escolhido explicitamente. As datas correspondem ao **registo em UTC** (`moved_at`), convenção da aplicação de origem QA, não à data efectiva da guia. Abertura considera registos anteriores à meia-noite do primeiro dia; o período inclui esse instante e todo o último dia; o fecho exclui a meia-noite do dia seguinte.
Por linha: **fecho = abertura + entradas − saídas**. Entradas são quantidades positivas; saídas são o valor absoluto das negativas. Transferências/devoluções só contam se tiverem movimentos efectivamente presentes na origem, sem serem inventadas a partir de documentos. Não se somam unidades ou artigos diferentes num total geral. As designações são actuais, não uma fotografia histórica do cadastro.
Um par com saldo de abertura mantém-se visível mesmo sem movimentos no período. Um artigo sem história até ao fecho não é apresentado como existência zero. Disponibilidade, reservas, bloqueios e valorização permanecem indeterminados e fora deste relatório.
## Acesso, consulta e paginação
Usa `stock.view`, empresa/unidade/pessoa/armazéns explicitamente mapeados, identidade física da origem e os bloqueios partilhados de autoridade do adaptador existente. A nova opção QA está desligada por omissão; não há direito novo ou alargamento da conta de leitura. O percurso de consulta anterior mantém-se disponível.
`view=period` em `/api/stock-read` exige duas datas válidas e ordenadas. Pesquisa literal por código/nome, armazém e páginas25/100 aplicam-se à mesma projecção de abertura/entradas/saídas/fecho. Os campos de data são recusados nas consultas anteriores. Referências cifradas incluem período, filtros, tamanho, pessoa/contexto e livro observado; alterações ou validade de600s exigem actualização.
O relatório usa REPEATABLE READ/READ ONLY e limite SQL de três segundos, aproveitando a revisão existente do livro/catálogo/armazéns. Agrupamento, contagem e limites são executados no servidor; o PHP recebe apenas a página pedida. A interface descarta respostas de períodos/contextos anteriores e conserva os filtros ao pedir nova referência.
## Provas
[Consolidação](proofs/stock-period-report-20261103.json): **52 verificações** — 28 API/SQL,12 de interface, duas da forma da consulta, três guardas directas e sete da demonstração. Build Vite e verificações de sintaxe concluídos. Os testes anteriores de recepção/ligação física/rastreabilidade foram reutilizados, sem repetir comandos ou suites.
A nova base de regressão contém105 pares elegíveis e114 movimentos iniciais, exclusivamente fixtures SQL de relatório. Não são recepções ou operações de negócio alegadamente executadas pelo workflow. Incluem dois armazéns autorizados, outro excluído, tenant estrangeiro, entradas/saídas nos limites do período, abertura sem movimentos, artigo apenas futuro, unidades UN/KG e quantidades superiores ao limite exacto do JavaScript. Um append adicional explícito verifica invalidação e recuperação da consulta.
Exemplo conferido: abertura10UN + entradas2,5UN − saídas3UN = fecho9,5UN. A entrada de700UN à meia-noite seguinte fica fora. Outra linha mantém exacto o fecho `9007199254740993` milésimos; SQL numeric/texto e BigInt evitam arredondamento.
Páginas25/100 percorrem o mesmo universo sem duplicações. Passaram pesquisa literal, filtros, datas impossíveis/invertidas, isolamento de módulo/unidade/armazém/permissão, contexto antigo, referência alterada/expirada/futura, alteração da origem e desactivação. Leituras preservaram artigos/armazéns/movimentos/auditoria/concessões antes do append de revisão intencional. Uma falha inicial de bootstrap duplicado no harness das guardas foi corrigida carregando uma única cópia do leitor; não exigiu alterar o pacote ou repetir a API aprovada.
A observação directa da projecção contou **cinco SELECTs para25 linhas e cinco para100**. O âmbito exclui autenticação, middleware e verificações físicas do host. Não é uma avaliação de carga sustentada ou memória. Os agregados ainda examinam a história elegível no SQL e podem atingir o limite em volumes maiores; não se instalaram índices.
## Demonstração e limites
Nova demonstração **8085**, inicialmente sem requisições principais ou movimentos: <http://127.0.0.1:8085/qa/enter/validator?module=stock&open=1>. Abrir Relatórios, escolher Movimentos de stock e indicar o período UTC. As provas HTTP confirmam sessão/capacidade, relatório vazio autorizado, consulta anterior, página/bundle servido e preservação. A demonstração não recebe as fixtures de volume da regressão.
A interface foi verificada por simulação de respostas e renderização React; revisão visual e acessibilidade permanecem separadas. Exportação/impressão documental, nomes históricos, restantes relatórios, carga sustentada e implantação continuam pendentes. As unidades pressupõem um cadastro coerente no livro QA; não se inferem conversões ou histórico de alterações de unidade. Antes de implantação terá de se validar a convenção temporal da origem. Estes ensaios não declaram capacidade operacional ou de implantação.
Preservados os seis registos, cache bloqueada, demonstrações, provas/checkpoints e trabalho alheio. Sem publicação, activação de Compras, migração/índice no destino, concessões reais ou aceitação/checkpoint presumidos.
+31
View File
@@ -0,0 +1,31 @@
# Movimento de Stock → recepção de origem — 03/11/2026
`SGF-STOCK-RECEIPT-TRACE-QA-v1` acrescenta a conferência documental a partir do movimento físico. Em **Stock → Existências → Movimentos**, uma entrada por recepção pode apresentar **Conferir recepção em Compras**. O clique pede explicitamente a mudança de módulo pelo mecanismo de contexto existente, preservando empresa/unidade e a protecção de formulários por guardar.
A indicação só aparece quando a composição a disponibiliza e a pessoa tem os direitos existentes `stock.view` e `purchasing_receipts.view`. Não há nomes de direitos ou concessões reais novos. A nova opção QA está desactivada por omissão.
## Conferência no destino
O browser transmite apenas o ID do movimento. Depois de mudar para Compras, um GET autorizado resolve a recepção e a ordem reais. O controlador confere novamente ambos os direitos, contexto, perfil pessoa/empresa/unidade, livro físico, tenant, armazéns explicitamente mapeados e políticas nativas de consulta. Confere ainda linha de recepção, quantidade aceite, artigo, armazém e ID da fotografia original. Pais enviados por query string são recusados.
O resultado contém apenas IDs exactos e um endereço local de consulta. A interface abre o histórico da recepção pelos mecanismos existentes, mesmo quando não está na primeira página. Origem recusada, resposta atrasada, parâmetros ambíguos ou pai incompatível não seleccionam outro documento nem preparam uma operação.
O leitor de Stock continua com SELECT somente nas suas três tabelas. A resolução documental usa o `ReceiptRuntime` existente de Compras e as suas políticas/bloqueios; não alarga a conta técnica de Stock. O writer, a confirmação de recepções, os leitores comuns, a função de navegação aceite e o mecanismo de alteração de contexto permanecem preservados.
## Provas e demonstração
[Prova consolidada](proofs/stock-receipt-trace-20261103.json): **46 verificações incrementais** — 16 da consulta/preservação, 20 de interface e dez da demonstração. Uma guarda de desactivação é chamada directamente; não é prova de middleware. As 41 verificações da ligação física anterior foram reutilizadas, não repetidas nem somadas.
O ensaio positivo reutilizou uma aplicação/sessões novas sobre o livro QA já concluído: mesmo movimento, recepção e ordem, sem criar outra origem. Conferiu recusa de módulo/unidade/permissão/contexto antigo, IDs desconhecidos e substituição de pais. Um erro no teste comparava instâncias de objectos de sequência pela identidade; foi corrigido para comparar valores serializados. As 14 verificações já aprovadas foram conservadas; o sufixo observou novamente ambas as APIs e comprovou **31 tabelas do host, 111 nativas e respectivas sequências intactas**.
Os testes de interface verificaram a selecção explícita de módulo antes da navegação, âmbito exacto, recusas, respostas atrasadas, botão React efectivo e arranque do workspace com DOM simulado. Não constituem revisão visual. O build Vite passou.
Nova demonstração **8084**: <http://127.0.0.1:8084/qa/enter/validator?module=stock&open=1>. Começa sem operações principais, recepções ou movimentos. A prova HTTP verificou o POST real de escolha de módulo, renovação do token, recusa do token antigo e de uma origem inexistente, assets servidos e preservação física/direitos. A única entrada de auditoria acrescentada é a selecção de contexto já prevista. Um erro de nome da tabela de auditoria no harness foi corrigido antes dessa alteração de contexto. A correlação positiva usa o livro concluído; não se apresenta a demonstração vazia como um percurso de negócio já executado.
## Limites
A passagem abrange entradas `receipt_in` do writer actual com fotografia coerente. Não infere origens históricas, saídas, devoluções ou transferências. Esses movimentos continuam consultáveis, sem atalho documental inventado.
A consulta documental reutiliza os bloqueios do runtime de Compras; este incremento não prova redução de contenção ou capacidade de carga. Revisão visual, acessibilidade, carga sustentada, instalação operacional e capacidade de implantação continuam pendentes. Não houve movimento novo, valorização, pagamento, lançamento, activação de Compras ou publicação.
Preservados os seis registos, a cache bloqueada, demonstrações anteriores, provas, checkpoints e trabalho alheio. Sem aceitação ou checkpoint presumidos.
+50
View File
@@ -0,0 +1,50 @@
# Anexos privados do fornecedor e ligação à revisão/propostas
03/11/2026. `SGF-SUPPLIER-DOCUMENTS-QA-v1`. Upload, conferência, consulta e descarga dos anexos pelo controlador nativo existente. Anexar conserva o documento e volta a colocar o fornecedor em revisão pendente; uma revisão distinta da versão actual permite a participação nas propostas. Não acrescenta outra autoridade documental ou financeira.
## Experimentar em8076
[Compras](http://127.0.0.1:8076/qa/enter/actor?open=1) abre um fornecedor e encontra **Anexos documentais privados**. Escolhe tipo e ficheiro de teste, fundamenta, confere o impacto e confirma com o mesmo ficheiro. O impacto mostra nome sanitizado, MIME detectado, tamanho, SHA-256 e a nova versão pendente.
[Finanças](http://127.0.0.1:8076/qa/enter/issuer?open=1) consulta os anexos, descarrega uma cópia conferida e revê a versão actual na decisão independente já existente. Só depois o fornecedor volta a aparecer como admissível no selector de propostas. A equipa pode iniciar uma requisição pelo [solicitante](http://127.0.0.1:8076/qa/enter/requester?open=1) e continuar no mesmo percurso integrado.
A demonstração é nova, com os fornecedores/orçamento QA preparados e sem anexos ou operações principais. As16peças documentais usadas no ensaio existem apenas na regressão separada.8075 e anteriores, os seus catálogos ampliados e os seis registos protegidos não foram alterados. O dossiê, a pesquisa de fornecedores e a recepção paginada continuam disponíveis nesta composição; ela não copia decisões ou volumes de teste das demos anteriores.
## Implementação
- Reutiliza `SupplierDocumentController.store/download`, `SupplierPolicy`, a participação/revisão e a tabela nativas. Sem novo escritor de anexos, migração de destino ou nomes de direitos. Upload exige `purchasing_suppliers.prepare` e preparação nativa; consulta/descarga exigem `purchasing_suppliers.view` e a política nativa de acesso a documentos, além da origem exacta de empresa/unidade.
- PDF/PNG/JPEG, tipos documentais e limites1KB–2MB seguem a validação do controlador original. O ficheiro é validado pelo conteúdo/MIME e extensão admitidos, sem confiar no MIME declarado pelo navegador. Não se certifica autenticidade, conteúdo fiscal ou suficiência legal do documento.
- Prévia executa o upload nativo num savepoint com armazenamento temporário **novo e privado**, reverte os registos/auditoria e elimina apenas o ficheiro dessa prévia. Sequências podem avançar; pastas temporárias vazias podem permanecer. Não é uma limpeza da cache ou de ficheiros anteriores.
- O corte cifrado prende ficheiro/SHA/tamanho/MIME/nome, tipo, fundamento, actor, origem, contexto de sessão, versão da ficha e validade10minutos. Confirmação revalida tudo e usa o controlador original para invalidar a revisão anterior. Um ficheiro ou contexto diferente exige nova conferência.
- Comando, fornecedor, documento e auditorias ficam na mesma transacção nativa. A proveniência SGF inclui fundamento e estado anterior/posterior. Mesma chave/conteúdo recupera o resultado, sem novo ficheiro ou alteração de uma revisão posterior; outra chave representa nova intenção de anexação, conforme o comportamento nativo, não deduplicação global por conteúdo.
- O armazenamento permanente fica fora de `public`, confinado à composição QA verificada, com caminhos gerados pelo mecanismo nativo. A projecção paginada15 não devolve o caminho nem o tenant nativo. Não há substituição/apagamento de anexos pela interface.
- A descarga revalida origem e política, confirma tamanho/SHA contra o registo e usa a descarga auditada original, como `attachment`, `nosniff`, sem cache partilhada e com CSP de sandbox. Não serve bytes alterados como se fossem a evidência original.
- O histórico existente do fornecedor inclui upload, comandos e descarga. A candidatura do fornecedor nas propostas usa o estado/revisão originais; não se cria proposta, pagamento ou reconhecimento financeiro por anexar.
## Falhas e recuperação
Ficheiro e base são recursos diferentes. Se a transacção falhar depois da escrita, o adaptador apaga **apenas o ficheiro recém-criado** depois de verificar que a respectiva linha não foi confirmada. Se essa verificação não for possível ou o resultado do commit for incerto, conserva o ficheiro para recuperação; não apaga evidência potencialmente confirmada. A repetição pode recuperar um comando efectivamente confirmado.
O ensaio forçou falha na auditoria: fornecedor/documento/auditorias voltaram ao estado anterior e o ficheiro não confirmado foi compensado. A repetição concorrente seguinte recuperou201/200, com um documento e um ficheiro. Crashes abruptos ou falhas que impeçam verificar o resultado podem deixar ficheiros privados sem linha correspondente; não se declara limpeza/reconciliação automática desses casos nem se executa manutenção sobre demos anteriores.
## Provas
[Consolidação](proofs/supplier-documents-composition-20261103.json):52verificações — anexos28, ligação/contexto9, guardas4, demonstração8 e build/assets3. Os primeiros17critérios passaram; corrigiu-se o adaptador de download que construía um campo de ficheiro nulo num pedido sem upload, retomando os11critérios restantes sem repetir os uploads confirmados.
Os testes incluem formato disfarçado/extensão executável, substituição do ficheiro, revogação do direito, erro de auditoria, concorrência, repetição depois de revisão, versão de revisão desactualizada, nome hostil sanitizado, bytes alterados no armazenamento, documento de outro fornecedor/tenant, unidade/módulo indevidos e geração de contexto/ligação alteradas. A descarga devolveu exactamente os bytes originais e registou a auditoria.
O volume de16anexos inclui duas confirmações pela API e14ficheiros de ensaio adicionados directamente pelo **mesmo controlador nativo** para testar páginas15/1. Não se apresentam como16provas independentes de interface. Ficheiros temporários de prévia ficaram a zero; documentos/ficheiros permanentes corresponderam ao volume previsto.
A prova de ligação preparou uma requisição sintética de1MZN pelos workflows existentes, apenas como pré-condição do selector: a reserva pertence a esse circuito, não ao anexo. Fornecedor pendente foi excluído e a tentativa de o forjar na proposta recusou; revisão distinta tornou-o disponível e permitiu a prévia original de proposta. Nenhuma proposta foi confirmada por arrasto e não foram criadas ordens, facturas, obrigações, pagamentos, lançamentos ou localizações.
As suites anteriores de fornecedores, propostas, recepção, obrigação e contabilidade foram preservadas e reutilizadas. A nova demo começa vazia; as verificações de consulta não mudaram versões, anexos ou auditoria.
A [matriz actualizada](proofs/supplier-documents-matrix-20261103.json) conserva seis módulos,13estágios e116critérios documentados. A [inspecção estática](proofs/supplier-documents-flow-20261103.json) encontra79fontes e nenhum ciclo obrigatório, sem ligações a bases. Passaram14verificações de sintaxe PHP,7de JavaScript e `git diff --check`; não são provas adicionais de utilização real ou de implantação.
## Limitações e preservação
O ensaio positivo de ficheiro usa PNG sintético; os formatos permitidos continuam os do controlador nativo, sem declarar uma nova regressão completa de todos os leitores de PDF/JPEG. Requisitos de documentos por fornecedor, autenticidade, validade fiscal e qualificação documental automática não são acrescentados por inferência. A integridade é conferida ao anexar/descarregar; a revisão mantém as decisões humanas e regras existentes.
Revisão visual continua separada, sem repetir o navegador bloqueado. Volume16 e limite2MB não validam carga sustentada, retenção, capacidade de armazenamento, instalação geral ou separação de proprietário/runtime. O schema sintético é preparado pelo projecto nativo actual e o runtime mantém o pacote fixado anteriormente.
Configuração desligada por omissão. Sem acessos/dados reais, migrações/concessões no destino, alterações dos seis registos, limpeza da cache bloqueada, activação de Compras, publicação, aceitação ou checkpoint.
@@ -0,0 +1,47 @@
# Conferência de facturas de fornecedor na interface SGF
03/11/2026. `SGF-SUPPLIER-INVOICE-MATCHING-QA-v1`: registo de dados do documento recebido, conferência exacta com ordem/recepção e validação financeira por identidade distinta, no mesmo livro nativo. Reutiliza `InvoiceController`, `InvoiceWorkflow` e `CommonBudget` originais, fixados pelo manifesto já testado; não acrescenta outro cálculo de conferência ou escritor orçamental.
## Demonstração8070
- [Compras](http://127.0.0.1:8070/qa/enter/actor?open=1): emitir a ordem da adjudicação QA já aprovada.
- [Armazém](http://127.0.0.1:8070/qa/enter/validator?open=1): conferir/receber1UN da ordem efectivamente emitida.
- [Finanças — preparação](http://127.0.0.1:8070/qa/enter/issuer?open=1): registar documento recebido pendente.
- [Finanças — revisão distinta](http://127.0.0.1:8070/qa/enter/reviewer?open=1): conferir e validar a factura.
- [Outro validador QA](http://127.0.0.1:8070/qa/enter/auditor?open=1): identidade distinta para ensaios de concorrência.
O contexto principal começa com adjudicação preparada de1UN/100MZN, reserva100MZN e **nenhuma ordem emitida, recepção, factura ou consumo inicial**. Um tenant estrangeiro tem uma ordem preparada exclusivamente para recusa de acesso; não aparece nas consultas do contexto principal. Os perfis automáticos são exclusivos do launcher privado em loopback.8070 não substitui ou reconfigura8069/anteriores.
Percurso de ensaio: emitir a ordem, aceitar a mercadoria, registar a primeira factura de0,400UN/base40MZN/imposto0/total40 e validá-la com outra identidade. Depois registar0,600UN/base60/imposto0/total60 e validar. O número e a data vêm do documento recebido; os campos começam vazios. A data tem de respeitar as regras do workflow original, incluindo a emissão da ordem e o exercício corrente. Os preços/unidades/impostos de origem são mostrados e reutilizados pela conferência, sem redigitação obrigatória. Não há aplicação da política de IVA de vendas SGF.
## Registo e validação
Registar preserva um documento pendente; não consome orçamento. A conferência verifica fornecedor/ordem, linhas distintas, quantidade aceite ainda não facturada, unidade, preço, taxa e totais, sem tolerância configurada. Uma validação distinta volta a conferir os dados e chama o consumo original do compromisso. Facturas parciais usam o arredondamento cumulativo original. Não há outra reserva, compromisso ou movimento de stock.
Cada comando tem prévia com impacto e fundamento individual. A prévia executa o controlador/workflow original num savepoint de rollback obrigatório; não persiste factura, linhas, auditoria ou consumo. Sequências podem avançar; os IDs temporários de registo não são apresentados como definitivos. A validação mostra explicitamente o montante a consumir no orçamento antes da confirmação.
Confirmação revalida permissão, função nativa, origem, empresa/unidade, geração do contexto, revisão das dependências e validade de dez minutos. A revisão inclui ordem/linhas, requisição/aprovações, fornecedor, conflitos declarados, recepções, correcções físicas efectivas, facturas e movimentos/consumos orçamentais relevantes. Mudanças exigem nova conferência; as regras originais são sempre reaplicadas na execução.
Factura/linhas/decisão/consumo e recibo `sgf.invoice.command` ficam na mesma transacção nativa. O recibo inclui contexto SGF, versão do pacote, autor, fundamento, chave, hash e fotografia do documento/resultados. Falhar esse recibo desfaz também os dados e a auditoria nativa. A mesma chave/conteúdo recupera o resultado histórico, sem novo consumo; outro conteúdo é recusado. Dois validadores com a mesma base produzem uma confirmação e uma recusa409. Uma prévia antiga de outra factura fica inválida quando muda a quantidade já validada.
Os direitos `purchasing_invoices.view/prepare/validate` foram apresentados antes da preparação e concedidos apenas nas fixtures novas. Ter direito de validação não permite aprovar a própria factura. Compras/Armazém não recebem consulta económica das facturas. O acesso usa a mesma requisição/ordem de origem e as permissões nativas; não se editam listas de IDs depois da emissão/recepção. A lista de ordens tem páginas25 e o histórico de conferência tem páginas15, com estados e autores preservados.
## Provas
[Consolidação técnica](proofs/supplier-invoice-composition-20261103.json): **77 verificações** —45 do percurso, quatro de fronteiras, seis das guardas/módulo, seis da navegação React,13 da demonstração e três de build/assets.
As45 incluem ordem emitida na interface SGF → recepção efectiva → duas facturas parciais validadas, registo antes da recepção recusado, divergência de total/preço/linha/quantidade, número normalizado repetido, auto-validação, âmbito estrangeiro, direito revogado, prévia adulterada, falha injectada e recuperação no registo/validação. Duas sessões de preparação com a mesma chave recuperaram um documento com201/200; dois validadores distintos obtiveram201/409. Consumos finais4000+6000=10000 em unidades monetárias menores, um compromisso original, duas facturas validadas, nenhum stock adicional, obrigação automática ou pagamento.
Uma factura concorrente de0,700UN/70MZN foi registada quando ainda havia1UN disponível e permaneceu pendente. Após validar a primeira parcial de0,400UN, a sua prévia anterior recebeu409 e uma nova conferência recebeu422 por exceder a quantidade restante. O original não foi apagado, reescrito ou considerado validado por conveniência.
As45 provas válidas não foram repetidas. Quatro sondas adicionais, sem novas decisões persistentes, comprovaram recusa após nova geração do contexto, versão do fornecedor e ligação de origem, mantendo facturas/consumos/auditoria intactos. Suites de associações, geografia, pagamentos e lançamentos anteriores foram reutilizadas, não reexecutadas.
[Manifesto complementar do escritor orçamental](proofs/invoice-budget-writer-manifest-20261103.json): os três ficheiros do núcleo coincidem entre a árvore de trabalho e as cópias QA/demonstração. Uma sonda autónoma de reflexão em runtime atingiu o limite de30s; os diagnósticos privados foram preservados e não se declara essa identificação em runtime verificada. A comparação complementar é de ficheiros, sem repetir comandos financeiros ou alterar as77 provas. Não constitui medição do tempo das operações, validação de implantação ou prova de um bloqueio transaccional.
## Fronteiras preservadas
Este bloco **não reconhece automaticamente uma obrigação**, não paga, não contabiliza e não emite um documento fiscal. O consumo é exclusivamente o efeito orçamental já existente no workflow original. O anterior cenário comum de obrigação11600MZN mantém a sua prova própria; não se declara que estas facturas100MZN já foram ligadas a essa composição ou a uma fonte histórica SGF viva.
Correcção/rejeição de facturas registadas, notas de crédito, anexos binários originais e políticas fiscais reais continuam separados. A factura pendente incompatível permanece com evidência e motivo de recusa; não se criou um mecanismo correctivo por edição directa. Datas entre exercícios, outras moedas e tolerâncias adicionais não foram introduzidas.
As dependências da ordem seleccionada são materializadas para a revisão; grandes históricos de facturas por ordem não tiveram carga validada. Revisão visual, carga sustentada, instalação geral e capacidade de implantação permanecem pendentes. Nenhuma migração/concessão foi aplicada no destino, nenhum direito público alterado e nenhuma versão de Compras activada/publicada. Os pacotes anteriores e o trabalho simultâneo em Compras foram preservados. Sem alterações aos seis registos protegidos, à cache bloqueada, às demonstrações anteriores, aceitação presumida ou checkpoint.
+37
View File
@@ -0,0 +1,37 @@
# 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](http://127.0.0.1:8067/qa/enter/actor?open=1).
- [Revisão — Finanças](http://127.0.0.1:8067/qa/enter/issuer?open=1).
- [Armazém](http://127.0.0.1:8067/qa/enter/validator?open=1), 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](proofs/supplier-composition-20261103.json): **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.
+36
View File
@@ -0,0 +1,36 @@
# Pesquisa integral de fornecedores para propostas
03/11/2026. `SGF-SOURCING-SUPPLIER-SEARCH-QA-v1`. Resolve a limitação funcional dos100primeiros fornecedores no formulário de propostas: pesquisa por nome/NUIT e páginas no servidor, com escolha individual e versão do fornecedor conferida na confirmação. Reutiliza os direitos, isolamento e workflow originais; sem novo motor de propostas ou financeiro.
## Demonstração8073
[Solicitante](http://127.0.0.1:8073/qa/enter/requester?open=1) prepara/submete uma requisição1UN/100MZN; [chefia](http://127.0.0.1:8073/qa/enter/approver?open=1) aprova distintamente. [Compras](http://127.0.0.1:8073/qa/enter/actor?open=1) abre o processo em Propostas, pesquisa nome ou NUIT, percorre páginas e escolhe expressamente. Pesquisar `900000110` encontra o exemplo além do antigo limite. Mudar de página/pesquisa limpa a escolha e a prévia; nenhum resultado é seleccionado automaticamente.
Esta nova composição conserva o percurso integrado de8072. Começa sem requisições/operações principais; fornecedores e orçamento QA são preparação explícita. Acrescenta127linhas artificiais de directório e marcadores de origem apenas na fixture nova, incluindo casos negativos. São125fornecedores admissíveis neste contexto, contando os três originais. Não são novos cadastros reais ou130revisões comerciais executadas.8072 e demonstrações anteriores ficam intactas.
## Implementação
- `GET /api/purchasing-sourcing/requests/{id}/suppliers`: direito existente `purchasing_sourcing.prepare`, função nativa elegível e acesso à requisição actual. Não basta poder consultar avaliações. Valida parâmetros, usa pesquisa literal por nome/NUIT, ordenação por nome/ID e páginas25ou100 no SQL; não carrega todo o directório para o navegador.
- Preserva `SupplierAccess`: fornecedores explicitamente ligados ou com origem auditada da empresa/unidade actual. Filtra activos, não bloqueados e com revisão não vencida. As regras nativas continuam a recusar IDs forjados na proposta, mesmo que alguém contorne o selector.
- A resposta contém apenas ID, nome, NUIT, versão e impressão da selecção; não devolve contactos, dados bancários ou diligências. A interface pede a página actual, mantém escolha explícita e protege contra respostas fora de ordem, falha de rede e saída do processo.
- A prévia captura a impressão actual do fornecedor. A interface envia também a impressão que o utilizador escolheu; alteração desde a pesquisa exige nova selecção. Antes de criar uma proposta, a confirmação volta a conferir o fornecedor, permissões, origem e versão do processo. O novo metadado é retirado antes de chamar o controlador original de propostas, preservando validação/preços.
- A impressão efectivamente conferida entra na proveniência do comando SGF, na mesma transacção. Recibo de uma confirmação já registada continua recuperação histórica sem nova execução; não é uma segunda proposta baseada em cadastro actualizado.
- Compatibilidade: clientes directos anteriores podem omitir a impressão ao pedir prévia, mas a prévia nova captura-a sempre e a confirmação exige correspondência. O resumo `suppliers` da consulta antiga fica limitado a25; não representa o directório completo. O formulário actual usa o endpoint paginado.
## Verificação
[Prova consolidada](proofs/supplier-search-composition-20261103.json): **51 verificações** — API31, guardas3, comportamento assíncrono da escolha8, demonstração6 e build/assets3. Cinco páginas25 e duas páginas100/25 cobriram os mesmos125fornecedores, sem sobreposição. Pesquisa por NUIT atingiu o exemplo além100; `%` e `_` foram tratados literalmente.
Fornecedores bloqueados, suspensos, com revisão vencida, sem origem autorizada, de outra unidade ou tenant foram excluídos/recusados. Direitos revogados, módulo incorrecto, contexto indevido, versão de selecção adulterada e alteração do fornecedor após prévia foram recusados. Alterações de versão/bloqueio nestas sondas são injecções QA delimitadas e restauradas, sem alterar uma decisão comercial real.
O fornecedor escolhido gerou uma única proposta pelo controlador original. Duas confirmações simultâneas devolveram201/200, com uma proposta/linha e recuperação idempotente. Pesquisa/prévia não criaram proposta persistente; não foram criadas ordens, facturas, obrigações, pagamentos ou localizações por consequência da escolha.
As provas individuais e do percurso integrado anterior foram preservadas, sem repetir as suites posteriores de adjudicação, recepção ou contabilidade. Sem ligações à base de destino, alteração dos seis registos, limpeza da cache bloqueada, concessões públicas/reais, activação de Compras, publicação, aceitação ou checkpoint.
A [matriz conferida](proofs/supplier-search-matrix-verified-20261103.json) conserva seis módulos,13estágios e106critérios documentados. A [inspecção estática actualizada](proofs/supplier-search-flow-verified-20261103.json) inclui os módulos JavaScript públicos do selector; presença de fontes não equivale a prova operacional. Passaram8verificações de sintaxe PHP,9de JavaScript e `git diff --check`.
## Limitações
Este incremento resolve alcance e escolha do directório, não é medição de carga sustentada. Não cria índices no destino. Os ensaios usam apenas bases sintéticas novas e o pacote nativo fixado anteriormente; instalação geral e separação de proprietário/runtime não estão validadas.
Revisão visual permanece separada, sem repetir o navegador bloqueado. Pagamentos/contabilidade da nova origem, migração dos antigos `ir_requests`, regimes/correcções posteriores e anexos mantêm os seus âmbitos próprios. O produto completo e a capacidade de implantação não são declarados concluídos.
+43
View File
@@ -0,0 +1,43 @@
# 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.
+45
View File
@@ -0,0 +1,45 @@
# Conferência de stock — dependências anteriores em lotes
Continuação: [enumeração do período e revisões contabilísticas em lotes](STOCK_PERIOD_BATCH_DELIVERY.md). Trata a leitura de estado final do período; o trabalho repetido de conferência de prefixos entre origens continua pendente. As medições abaixo conservam o âmbito do leitor de prefixos.
03/11/2026. Continuação técnica da [valorização sintética autorizada](GENERAL_LEDGER_STOCK_VALUATION_DELIVERY.md), sem novo efeito financeiro. **A árvore principal deixa de carregar todos os IDs e snapshots dos lançamentos anteriores para conferir uma origem.** Os pacotes congelados das demonstrações não foram actualizados.
## Alteração
`StockValuation::priorJournals()` confere a cobertura por SQL, projecta apenas identificadores, revisões e taxa e executa a consulta de metadados uma vez através de cursor PostgreSQL. Cada FETCH recebe até500 linhas. O cursor fecha no sucesso e na recusa; não existe cache entre pedidos.
Até25 referências conserva-se a representação anterior. Acima desse limite, a evidência usa `STOCK-PRIOR-STREAM-v1`: contagem, SHA256 de **todas** as referências ordenadas, primeiras25 referências e quantidade omitida da prévia. As referências posteriores à prévia continuam a afectar o resumo e a validação. Mudanças de taxa, cobertura, contexto ou evidência incompleta recusam a conferência; não se adopta um prefixo parcial.
A projecção mantém os tipos JSON dos identificadores. Uma taxa textual ou fraccionária continua recusada como na versão anterior. A confirmação continua a calcular o estado actual pelo mesmo serviço; não confia no resumo enviado pelo cliente. Quando há transacção do chamador, preserva-a. Fora dela, a leitura do prefixo abre e termina uma transacção REPEATABLE READ READ ONLY.
## Antes/depois comparáveis
[Resultados, condições e hashes](proofs/stock-prefix-stream-20261103.json). Fixture **apenas de metadados**, numa base QA nova55439, sem criar movimentos físicos ou lançamentos financeiros através destas linhas de ensaio. Não são1.000/5.000/10.000 operações de stock validadas pelos workflows.
Mesmos dados e chaves primárias, snapshots com8KiB de conteúdo adicional sintético, três amostras quentes por variante, ordem alternada e mesma transacção de leitura. Tempo mediano do auxiliar de leitura/construção das referências; máximo de memória PHP usada incremental. PostgreSQL, RSS, kernel HTTP completo e conferência do período não estão incluídos. A validação independente dos resumos fica fora da janela medida.
| Referências anteriores | Tempo ms antes/depois | Consultas antes/depois | Pico incremental PHP KiB antes/depois | Máximo de linhas por resultado antes/depois |
| ---: | ---: | ---: | ---: | ---: |
|1.000|160,25 /46,00|2 /6|13.055,16 /363,70|1.000 /500|
|5.000|1.212,30 /207,83|2 /14|65.346,91 /363,70|5.000 /500|
|10.000|2.836,69 /565,06|2 /24|130.663,60 /363,70|10.000 /500|
O número de consultas aumenta por incluir DECLARE, FETCH e CLOSE. O custo transferido para PHP e a memória diminuem; não se declara redução simultânea de todas as dimensões. Em10.000, a representação das dependências passa de2.067.789 para5.228 bytes. São o ganho conjunto de projecção/leitura em lotes/resumo, não ganhos isolados de cada componente. **Nenhum índice experimental foi criado e nenhum índice foi aplicado no destino.**
## Diagnósticos e segurança da alteração
A primeira leitura em lotes ainda criava uma função recursiva de serialização por referência. Os ciclos só eram libertados pelo GC e faziam a memória crescer com o volume. O resumo passou a codificar directamente quatro campos escalares em ordem canónica, conservando o mesmo SHA256; não se alterou a função canónica financeira comum.
Uma variante intermédia que convertia a chave física para texto regrediu fortemente e a consulta foi cancelada **apenas no backend do banco de metadados QA identificado**. O EXPLAIN controlado do cursor mostrou Nested Loop com Materialize/Seq Scan de10.000 linhas físicas. A comparação numérica validada passou a usar a chave primária física com estimativa de uma linha por procura. Os planos são estimativas sem ANALYZE, não medições de capacidade. A consulta valida a representação numérica antes da conversão; a evidência conserva o tipo JSON original.
As tentativas intermédias e a tentativa incompleta de instrumentação foram preservadas. Só a execução final é usada na tabela. O ensaio final impõe30s por SQL e15s por chamada medida para ambas as variantes; nenhuma amostra seleccionada atingiu esses limites. A variante cancelada não foi convertida numa mediana ou ganho fictício.
## Provas e preservação
**48 verificações dirigidas:**43 de equivalência, cobertura, tipos, isolamento, resumos, lotes e medições;5 de contexto transaccional/cursor. Incluem fronteiras0/1/25/26/501, mudança fora da prévia, predecessor ausente, outra taxa na última parte, referência incompleta, tenant/empresa/unidade distintos, limite real de500 linhas por resultado e ausência de cursores abertos após recusa.
Os três movimentos do livro de regressão já encerrado foram consultados **em transacção somente de leitura**: o resultado completo da origem, incluindo revisões e evidência publicada, permanece byte a byte equivalente à baseline e aos três snapshots contabilizados. Assim se reutilizam as146 verificações e23 de regressão anteriores no seu âmbito, sem repetir o ciclo de stock, a suite geral ou as medições da fila administrativa.
O pacote congelado de8062/8063 mantém o manifesto `8b3ad1c600b84c8526b2d9f453a1c5c4e174a69d6acc78ace2af4f52a25dd762`. A optimização está na fonte para composições futuras; não foi instalada silenciosamente nessa demonstração nem no destino. Nenhum snapshot, direito ou registo operacional existente foi reescrito. Seis registos, cache bloqueada, provas anteriores e trabalho alheio preservados.
**Limites:** o trabalho e as consultas ainda crescem com o prefixo; uma página ou período pode voltar a conferir vários prefixos. A leitura conjunta entre origens de uma página/período e a carga sustentada permanecem por avaliar. Este ensaio não valida implantação, memória do servidor, concorrência sustentada, método de valorização real ou revisão visual. Sem publicação, activação de Compras, aceitação ou checkpoint presumidos.
File diff suppressed because one or more lines are too long
@@ -0,0 +1,57 @@
{
"passed": true,
"checks": 16,
"names": [
"all20407 source records are preserved",
"source levels reconcile to the full record count",
"leading zero preserved as text",
"source-version plus source-ID uniquely identifies each record",
"duplicate code paths are retained and signalled",
"conflicting duplicate designations are exposed",
"nine absent designations remain absent",
"missing immediate parent rows are reported without invented labels",
"alphanumeric source codes survive unchanged",
"explicit selection permits a province without imposing deeper precision",
"CARTOGRAPHY_VERSION_CHANGED",
"CARTOGRAPHY_TERRITORY_UNKNOWN",
"CARTOGRAPHY_REVIEW_REQUIRED",
"preparation is deterministic without source mutation",
"unexpected workbook schema is refused",
"duplicate source IDs are refused"
],
"source": {
"name": "cartografia_moz.xlsx",
"sha256": "70996d9a9133785a848de90bedb4bf685e24d8f823cd153c0adc43eac642a292",
"sheet": "Sheet1",
"range": "A1:H20408",
"authority_declared_by_user": "INE",
"authority_independently_verified": false
},
"total": 20407,
"levels": {
"1": 11,
"2": 148,
"3": 437,
"4": 1334,
"5": 1870,
"6": 16607
},
"diagnostics": {
"duplicate_path_groups": 48,
"duplicate_extra_rows": 48,
"conflicting_designation_groups": 39,
"missing_designations": 9,
"missing_parent_records": 8610,
"ambiguous_parent_records": 377,
"incomplete_ancestry_records": 10675,
"selectable_records": 9678
},
"prepared_sha256": "5ed851666f417afb53a7e804a32d703f5432bc6a2d4532e333ebedef5910c98a",
"implementation_sha256": "1153c13031ba827ec177c74b624dbeb555e06f731409d5baea6b7b702616c042",
"original_workbook_modified": false,
"database_connections": 0,
"business_records_assigned": 0,
"catalogue_activated": false,
"authority_independently_verified": false,
"public_data_payload_committed": false
}
@@ -0,0 +1,184 @@
{
"increment": "COMMON-FINANCE-BUNDLE-QA-v1",
"consolidated_at_utc": "2026-11-02T21:53:17.036Z",
"functional_packaging_code": true,
"artifact": {
"files": 25,
"manifest_sha256": "6a507ea7d708a12a8e526e4c610696d8db84079d18aede470237b65505630e7e",
"source_packages": [
"payables",
"general-ledger"
],
"no_credentials_or_fixture_data": true
},
"tests": {
"runtime": {
"passed": true,
"checks": 9,
"runtime_classes_from_artifact": 5,
"one_journal_two_lines": true,
"source_stock_budget_preserved": true,
"manifest_sha256": "6a507ea7d708a12a8e526e4c610696d8db84079d18aede470237b65505630e7e",
"no_sgf_core_source_loaded": true,
"no_remote_sgf": true
},
"integrity": {
"root": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\finance-bundle-check-466b086ab03e",
"passed": true,
"checks": 6,
"artifact_files": 25,
"manifest_sha256": "6a507ea7d708a12a8e526e4c610696d8db84079d18aede470237b65505630e7e",
"refused": [
"modified",
"missing",
"extra",
"traversal",
"wrong_pin"
],
"private_diagnostics_preserved": true
},
"host_boot": {
"root": "C:\\laragon\\data\\sgf-tempo\\run\\modular-regression-2576427d1939\\private\\ledger-native-55e7c1ae0543\\bundle-boot-4972957ade5f",
"passed": true,
"checks": 4,
"refused_before_business_boot": [
"modified",
"extra",
"wrong_pin",
"modified_loader"
],
"loader_marker_never_executed": true,
"no_fallback": true,
"original_proof_preserved": true
},
"team_readiness": {
"passed": true,
"checks": 28,
"composition": "native",
"url": "http://127.0.0.1:8052/qa/ledger-demo",
"tag": "6873db67a6a7",
"three_roles": true,
"no_business_commands": true,
"initial_principal_minor": 6000,
"initial_balance_minor": 6000,
"initial_journals": 0,
"initial_payment_effects": 0,
"financial_return_link": true,
"own_cookie": true,
"visual_review": false
},
"syntax": {
"php": 6,
"js": 5
},
"native_phpstan": {
"level": 7,
"files": 2,
"errors": 0
},
"pint": true
},
"evidence": [
{
"file": "private/ledger-native-55e7c1ae0543/finance-bundle-proof.json",
"sha256": "f43ab4802f016671092e438012691cf2cd575484bf46ae9f108f290109bbc541"
},
{
"file": "private/finance-bundle-check-466b086ab03e/proof.json",
"sha256": "e3ceaa7d36443a47a9a0fa257fa855efe7ffedf8bf95d985cd84d9e129674f37"
},
{
"file": "private/ledger-native-55e7c1ae0543/bundle-boot-4972957ade5f/proof.json",
"sha256": "ff2112a23cca6373a95bd58d339d53bc19b065e4577f676a45feca91a245ff34"
},
{
"file": "private/ledger-native-6873db67a6a7/ledger-cycle-demo-http.json",
"sha256": "084f19be64a906dd07f12da21cb6b378bf0f222143208f9bba1414d480bb5a6c"
}
],
"previous_proof": {
"file": "docs/proofs/common-ledger-complete-cycle-20261102.json",
"sha256": "23657d594b84e6aeeb0d16d45790d54feca04b12e2260cfffa4f8e4a37eaa0ce",
"private_artifacts_verified": 15
},
"sources": [
{
"file": "packages/finance-bundle/Bundle.php",
"sha256": "621f4ab4899b9595f15492fe6981d23b280bf623db127e95c434da7bfc821f06"
},
{
"file": "scripts/finance-bundle-build.mjs",
"sha256": "98aadd464b9f6d1f345d799d549567ca63aebf8369a8f38e0a3cc2fbc501d384"
},
{
"file": "scripts/finance-bundle-check.mjs",
"sha256": "1380b37e7dbe57ef4c2d83f40e59f9b68a43a583a73a9085d7506b42da11431c"
},
{
"file": "scripts/finance-bundle-boot-check.mjs",
"sha256": "7debd011f8fa77d190a5c8cad721d8b2195f50e2f6f1f6aee66d2c45b5a42a92"
},
{
"file": "scripts/summarize-finance-bundle.mjs",
"sha256": "2130c9ef4a677da6c1ea9fae8ba0345978e3497524190f549ccbc2ca27e5a563"
},
{
"file": "scripts/payable-history-sgf-proof.php",
"sha256": "57e94e9e1b7ee4496e4888977a5484f6a154799c0d4b7ac2d7941c9bdf40b8b3"
},
{
"file": "scripts/ledger-cycle-native-proof.php",
"sha256": "8d12d2df6a7222cec9dc8d6fbd19d33bef18a8e603010f2577dd22a27f7c4ec1"
},
{
"file": "scripts/ledger-cycle-native-run.mjs",
"sha256": "bfd66c1832e170c93270bf07fafb31c0b646bea2acb1fb3266e748e660f1e6a6"
},
{
"file": "../compras/app/Services/FinanceBundle.php",
"sha256": "5a0a9d7f650b494789e66d83981a67d0d9636885d8282732b3c9270a9f6e441d"
},
{
"file": "../compras/app/Providers/AppServiceProvider.php",
"sha256": "366f392b947da2daa210a2158fc480855e1ea1da90bab36bd156d78c1781a7f0"
},
{
"file": "../compras/config/common-finance-bundle.php",
"sha256": "4eed8df4e519d2940feefc0522bdfb4964ee11d21847e825cb240f1a7ed29330"
},
{
"file": "docs/COMMON_FINANCE_BUNDLE_DELIVERY.md",
"sha256": "41c8bef633e91f536767a43845334f9700109c19448d0c7da6c2ac79dfc645ce"
},
{
"file": "docs/GENERAL_LEDGER_SALES_RECEIVABLE_SCOPE.md",
"sha256": "b689ed1624eba2f9346427d41f5d68be2168c7b482cad8030522876b302df1a3"
}
],
"demo": {
"tag": "6873db67a6a7",
"pid": 25996,
"url": "http://127.0.0.1:8052/qa/ledger-demo",
"loopback_only": true,
"cookie": "sgc_ledger_6873db67a6a7",
"new_isolated_team_fixture": true,
"independent_financial_book": true,
"existing_demos_untouched": true
},
"limits": {
"full_application_distribution": false,
"operational_installation": false,
"visual_review_pending": true,
"deployment_capacity_validated": false,
"publishing": false,
"purchasing_activation": false,
"real_access_changes": false,
"checkpoint": false
},
"preserved": {
"six_pending_associations": true,
"blocked_cache": true,
"existing_demos": true,
"previous_valid_proofs": true
}
}
@@ -0,0 +1,671 @@
{
"increment": "COMMON-LEDGER-COMPLETE-CYCLE-SIM-v1",
"authorization_date": "2026-11-02",
"consolidated_at_utc": "2026-11-02T21:43:36.845Z",
"authorization": {
"answer": "Autorizar o ciclo sintético proposto",
"approved_scope_sha256": "e4c96d815cb4c923f7e86d74d8ea20297ec129f64adbf4d1c927647cfe2f98b4",
"archive_matches_prior_presented_proposal": true,
"real_access": false,
"reopening": false
},
"functional_code": true,
"synthetic_only": true,
"status": "implemented_and_tested_with_explicit_limits",
"tests": {
"sgf_cases": {
"passed": true,
"checks": 23,
"rollback_only": true,
"principal_minor": 6000,
"allocated_balance_minor": 4000,
"final_balance_minor": 6000,
"debit_minor": 22000,
"credit_minor": 22000,
"journals": 5,
"lines": 10,
"correction_pairs": 1,
"period_closed": true,
"obligation_id": 1,
"recognition_journal_id": 1,
"allocation_id": 1,
"reversal_id": 1,
"correction_id": 1,
"period_check_id": 1
},
"native_cases": {
"passed": true,
"checks": 23,
"rollback_only": true,
"principal_minor": 6000,
"allocated_balance_minor": 4000,
"final_balance_minor": 6000,
"debit_minor": 22000,
"credit_minor": 22000,
"journals": 5,
"lines": 10,
"correction_pairs": 1,
"period_closed": true,
"obligation_id": 1,
"recognition_journal_id": 1,
"allocation_id": 1,
"reversal_id": 1,
"correction_id": 1,
"period_check_id": 1
},
"native_persisted_workflow": {
"passed": true,
"checks": 16,
"rollback_only": false,
"principal_minor": 6000,
"allocated_balance_minor": 4000,
"final_balance_minor": 6000,
"debit_minor": 22000,
"credit_minor": 22000,
"journals": 5,
"lines": 10,
"correction_pairs": 1,
"period_closed": true,
"obligation_id": 1,
"recognition_journal_id": 7,
"allocation_id": 2,
"reversal_id": 2,
"correction_id": 2,
"period_check_id": 2
},
"security": {
"passed": true,
"checks": 18,
"self_and_same_person_refused": true,
"revoked_corrective_and_close_rights_refused": true,
"individual_route_cannot_bypass_rights": true,
"orphan_pair_refused_by_database": true,
"post_receipt_failure_recovered": true,
"five_new_tables_append_only": true,
"rollback_only": true
},
"concurrency": {
"passed": true,
"corrective_pair": {
"blocked": {
"a": {
"chain_reaches_parent": true,
"event": "transactionid"
},
"b": {
"chain_reaches_parent": true,
"event": "tuple"
}
},
"results": {
"a": {
"status": 200,
"result": {
"state": "corrected",
"correction_id": 2,
"result_id": 2,
"reverse_journal_id": 10,
"replacement_journal_id": 11,
"replayed": false
}
},
"b": {
"status": 200,
"result": {
"state": "corrected",
"correction_id": 2,
"result_id": 2,
"reverse_journal_id": 10,
"replacement_journal_id": 11,
"replayed": false
}
}
}
},
"stale_after_committed_change": {
"blocked": {
"a": {
"chain_reaches_parent": true,
"event": "transactionid"
}
},
"results": {
"a": {
"status": 409,
"message": "Factos, regras ou período mudaram; prepare nova conferência."
}
}
},
"period_close": {
"blocked": {
"a": {
"chain_reaches_parent": true,
"event": "tuple"
},
"b": {
"chain_reaches_parent": true,
"event": "transactionid"
}
},
"results": {
"a": {
"status": 200,
"result": {
"state": "closed",
"closure_id": 2,
"period_version": 2,
"replayed": false
}
},
"b": {
"status": 200,
"result": {
"state": "closed",
"closure_id": 2,
"period_version": 2,
"replayed": false
}
}
}
},
"journals": 5,
"lines": 10,
"correction_results": 1,
"closures": 1,
"period_versions": 2,
"old_check_id": 409,
"final_check_id": 3,
"final_revision": "3e96baa881bad301f15035e7a2507dbdcd3b6bd98e97549711ae921fe1a928ce"
},
"sgf_http": {
"passed": true,
"checks": 70,
"composition": "sgf",
"tag": "6811563df7af",
"actual_http": true,
"financial_commands": true,
"all_ledger_actions": true,
"principal_minor": 6000,
"partial_balance_minor": 4000,
"final_balance_minor": 6000,
"journals": 5,
"lines": 10,
"debit_minor": 22000,
"credit_minor": 22000,
"correction_pairs": 1,
"period_closures": 1,
"real_csrf": true,
"no_browser": true,
"visual_review": false
},
"native_http": {
"passed": true,
"checks": 61,
"composition": "native",
"tag": "717011443eb8",
"actual_http": true,
"financial_commands": true,
"all_ledger_actions": true,
"principal_minor": 6000,
"partial_balance_minor": 4000,
"final_balance_minor": 6000,
"journals": 5,
"lines": 10,
"debit_minor": 22000,
"credit_minor": 22000,
"correction_pairs": 1,
"period_closures": 1,
"real_csrf": true,
"no_browser": true,
"visual_review": false
},
"sgf_final": {
"passed": true,
"checks": 10,
"composition": "sgf",
"coherent_read": {
"isolation": "repeatable read",
"read_only": "on"
},
"writer_locks": 0,
"financial_sha256": "2df31512f7ea339b1ccd2467e8a7e27cbea7b22241b8e389c40ae981c44035f2",
"financial_unchanged": true,
"bounded_evidence_navigation": true,
"individual_corrective_route_409": true,
"native_originals_preserved": null,
"default_cycle_enabled": false
},
"native_final": {
"passed": true,
"checks": 10,
"composition": "native",
"coherent_read": {
"isolation": "repeatable read",
"read_only": "on"
},
"writer_locks": 0,
"financial_sha256": "3da6c77f36fed1bd5339a9b7b2e2ac7e9d1f38afe183a4b2e493a2ce83593229",
"financial_unchanged": true,
"bounded_evidence_navigation": true,
"individual_corrective_route_409": true,
"native_originals_preserved": true,
"default_cycle_enabled": false
},
"native_actor": {
"passed": true,
"checks": 5,
"candidate_account_refused": true,
"typed_internal_user_read": true,
"financial_unchanged": true
},
"first_effect_compatibility": {
"passed": true,
"cases": [
{
"name": "prepare-independent-review-post-and-source-reconciliation",
"assertions": 9,
"passed": true
},
{
"name": "repetition-conflicting-key-and-recovery-after-period-version",
"assertions": 6,
"passed": true
},
{
"name": "rights-revoked-actor-person-and-no-inheritance",
"assertions": 4,
"passed": true
},
{
"name": "independence-rejection-and-preparer-ownership",
"assertions": 6,
"passed": true
},
{
"name": "source-rule-period-latest-capture-and-revision-changes",
"assertions": 10,
"passed": true
},
{
"name": "invalid-period-accounts-currency-foreign-scopes-and-extra-fields",
"assertions": 10,
"passed": true
},
{
"name": "failure-at-every-posting-boundary-and-idempotent-recovery",
"assertions": 12,
"passed": true
},
{
"name": "database-balance-guards-and-append-only-history",
"assertions": 16,
"passed": true
}
],
"assertions": 74,
"financial_fingerprint_equal": true,
"all_test_journals_rolled_back": true
},
"sgf_demo": {
"passed": true,
"checks": 28,
"composition": "sgf",
"url": "http://127.0.0.1:8050/qa/ledger-demo",
"tag": "f729b545c0b6",
"three_roles": true,
"no_business_commands": true,
"initial_principal_minor": 6000,
"initial_balance_minor": 6000,
"initial_journals": 0,
"initial_payment_effects": 0,
"financial_return_link": true,
"own_cookie": true,
"visual_review": false
},
"native_demo": {
"passed": true,
"checks": 28,
"composition": "native",
"url": "http://127.0.0.1:8051/qa/ledger-demo",
"tag": "18278bfce5c2",
"three_roles": true,
"no_business_commands": true,
"initial_principal_minor": 6000,
"initial_balance_minor": 6000,
"initial_journals": 0,
"initial_payment_effects": 0,
"financial_return_link": true,
"own_cookie": true,
"visual_review": false
}
},
"quality": {
"phpstan": {
"passed": true,
"errors": 0,
"level": 7,
"files": [
"app/Services/GeneralLedger.php",
"app/Http/Controllers/GeneralLedgerController.php",
"app/Http/Controllers/SupplierPaymentsController.php",
"config/general-ledger.php"
],
"canonical_package_autoload": true,
"private_cache": true
},
"pint": {
"passed": true,
"mode": "--test",
"same_four_native_files": true
},
"general_composer_suite_not_run": true,
"shared_cache_not_cleared": true,
"syntax": {
"php_files": 29,
"javascript_files": 6
}
},
"private_evidence": [
{
"file": "private/ledger-92c3465d242c/ledger-cycle-cases.json",
"sha256": "e79f0c9c4423abbe8fac86ee5fe38ced1a3ced3491fd8db4229aaf5e461a2344"
},
{
"file": "private/ledger-native-4731dad525b5/native-cycle-cases.json",
"sha256": "e79f0c9c4423abbe8fac86ee5fe38ced1a3ced3491fd8db4229aaf5e461a2344"
},
{
"file": "private/ledger-native-4731dad525b5/native-cycle-workflow.json",
"sha256": "7f0790b36a6f9c44e1f52a53e651db103bb19dfb97036ee8b7a8bb7e1c2589f5"
},
{
"file": "private/ledger-ff7852ea4305/ledger-cycle-security.json",
"sha256": "bd00a66bc52374019f557808e49af0b76d68b7bb379759bce6d1dd8c4c8f7136"
},
{
"file": "private/ledger-92c3465d242c/ledger-cycle-race.json",
"sha256": "c720f38b36fabf88a66eced57cd34afc4104e9692a4fb39f1efa7a7c4961c2b1"
},
{
"file": "private/ledger-6811563df7af/ledger-cycle-http.json",
"sha256": "983b3b43591aeb2eeb766d87629eeaa20cfee3804c8f18fae23fe1c09d84395e"
},
{
"file": "private/ledger-native-717011443eb8/ledger-cycle-http.json",
"sha256": "230cfcfd8da2e42d76aa8341d4ce467c6a2db552b3a56cb1e5380fad28592ac6"
},
{
"file": "private/ledger-6811563df7af/ledger-cycle-final.json",
"sha256": "82a63a153fca05f4db298eb42c6a0cf38e4e3cb05c057cd07453850675373cdd"
},
{
"file": "private/ledger-native-717011443eb8/ledger-cycle-final.json",
"sha256": "87f1af04c884e00d3b297de40d6c780dc4b32393092fab7239dfabf0d8548ac4"
},
{
"file": "private/ledger-native-717011443eb8/ledger-cycle-actor-check.json",
"sha256": "198f00d0c5cc7797f11416d8dc3314585de50c1cb9e51e78531428cc06ea63b3"
},
{
"file": "private/ledger-e1272b65ff5d/ledger-cases.json",
"sha256": "8197a2fa96f3dee1e85b411c94b5f72f4a45ac3eac14241bc0062faffb7a0ff8"
},
{
"file": "private/ledger-f729b545c0b6/ledger-cycle-demo-http.json",
"sha256": "2d6ce530066d1b834d06cfcf04808f8a0442adf61c39c1e0ee50b9d914a96e54"
},
{
"file": "private/ledger-native-18278bfce5c2/ledger-cycle-demo-http.json",
"sha256": "11b3d293d1a63408127ff1d77a7191f0c5c6aeeb645ffbb0fd5baf7c6e656bf4"
},
{
"file": "private/ledger-cycle-approved-scope.md",
"sha256": "e4c96d815cb4c923f7e86d74d8ea20297ec129f64adbf4d1c927647cfe2f98b4"
},
{
"file": "private/ledger-cycle-quality.json",
"sha256": "d45a5e986827a80b514e1526405c011e47d9f56747bf6be65f9b9c056f98ab9a"
}
],
"previous_private_artifacts_verified": 14,
"previous_proofs": [
{
"file": "docs/proofs/sgf-financial-ledger-flow-20261102.json",
"sha256": "5d384fd07b26cc38ad3946a6ec27341c7e177152a32d53ed1d5d56743c165836"
},
{
"file": "docs/proofs/common-ledger-payable-20261102.json",
"sha256": "330b4b15ad952d014a828d17ec810a65c4a724d64cf91fd04807e7f37f4ab44b"
},
{
"file": "docs/proofs/sgf-payable-paged-read-20261102.json",
"sha256": "98ddb85c4819ad6e071ab69df3a19244c04e71c0d2e17539eac3c41a2d155b0b"
},
{
"file": "docs/proofs/sgf-settlement-read-isolation-20261102.json",
"sha256": "c83e1857931558aed6249d3acf75f08fa819fb9e35e88080abe7bddbfb3af248"
},
{
"file": "docs/proofs/module-association-consolidation-summary-20261102.json",
"sha256": "8f693f39763ee21a22ebd3929d95ba1480f339eca18742fa53055c69eb5219ef"
}
],
"implementation_sources": [
{
"file": "packages/general-ledger/bootstrap.php",
"sha256": "13c28f93f1846558a9058546213e044b67731d99334773c19421c613404dc17d"
},
{
"file": "packages/general-ledger/README.md",
"sha256": "60d351eb2d9ba82193cb860b31afb43bebb5a02dab6bf6413806b81680597571"
},
{
"file": "packages/general-ledger/src/LedgerSchema.php",
"sha256": "1fb2490fe8d4d206d2f8157803307cdd4e2f733150d0fec4993a7e229fce58cb"
},
{
"file": "packages/general-ledger/src/PayableJournal.php",
"sha256": "ad688290605153e55ef64871b87b5501b7c22102e2a5d051324c04737f439825"
},
{
"file": "packages/general-ledger/src/LedgerCycle.php",
"sha256": "0096c76526c4c67c49b7a1746c2351027ed478c23eb0454f4d4aa7274f256826"
},
{
"file": "packages/general-ledger/src/CycleSchema.php",
"sha256": "25407f9ea4321ee3acb0c310b5d981b8fdaf89c5464d32878ecc57c29e60972d"
},
{
"file": "packages/general-ledger/src/CycleWorkspace.php",
"sha256": "a76bf1b4c18c3a0585de744d58e38e736777831a019200150deb1615b6fe5010"
},
{
"file": "packages/general-ledger/ui/cycle.php",
"sha256": "ab1529f9ea79a635d0559729639f08c2a007c98675e0bde2526ec750cf659231"
},
{
"file": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "f3c0994e75820919f0e008b3e532d00082ec18c531e5e10a77da565b08a0f667"
},
{
"file": "app/Modules/Accounting/GeneralLedgerController.php",
"sha256": "9e50af7221cdfd29c69c1287d2d2049c2aa3f93babea8ca32d0ec9d0f97550ec"
},
{
"file": "app/Modules/Purchasing/SupplierPaymentsController.php",
"sha256": "99d3ba60b4e9e01bfcc496d6def949c7aa1c804562ec24eb0a23cf3087c16640"
},
{
"file": "packages/payables/src/SettlementHttp.php",
"sha256": "1749df4956bce7beaf50a7c48e443f0bfba0f82c5216257c50b046edfd3a3b4f"
},
{
"file": "packages/payables/ui/settlements.php",
"sha256": "829c1e0a17d732b41207976671d8a67f1c3bf51e020a922653d03c7f19408bea"
},
{
"file": "resources/views/accounting/general-ledger.blade.php",
"sha256": "a1203ccf7d62b5b2f6d6f2f84363a6e58c082fe1cddb41be445e3e5b659e3cb4"
},
{
"file": "resources/views/accounting/ledger-cycle-entry.blade.php",
"sha256": "3303264b334d1516284b31cd3c03da5676760221582180236fa64c507272e4c1"
},
{
"file": "config/general_ledger.php",
"sha256": "2b0794ca0f3337acd3fc7793f209b5f649d0a5cc3c94b6bdc2a547faaced64f4"
},
{
"file": "routes/web.php",
"sha256": "659ddc77f9f5536a093ee4084608bd314aa2173e92a6c14ca2310846e9d3823a"
},
{
"file": "../compras/app/Services/GeneralLedger.php",
"sha256": "e86a54f359b428afe9f3352e80c69342bb24a2e389d3c6286323fbce226e0ffe"
},
{
"file": "../compras/app/Http/Controllers/GeneralLedgerController.php",
"sha256": "e188379b51aeef06ff8ab37233252849eca7aed34001c5135bbd93512bb81c9b"
},
{
"file": "../compras/app/Http/Controllers/SupplierPaymentsController.php",
"sha256": "b9c299bf889875bf595728ef7e625a6c9751217b00c1584bfa5010dd8d36ab23"
},
{
"file": "../compras/config/general-ledger.php",
"sha256": "11cbc29f4df9ef6dbf224f0dc39aff390e8da61caad7ca44c91058ed4678e270"
},
{
"file": "../compras/routes/web.php",
"sha256": "c045d26c7617b66a94eb5ff7cfabe99e4a347976048f52a2dfbbb463c26661ce"
},
{
"file": "scripts/ledger-proof.php",
"sha256": "f8a1bd2cce762ac1e8f4f0bba54629ae2dfa59ebfecd310c884e8cb778cfee0a"
},
{
"file": "scripts/ledger-run.mjs",
"sha256": "9280fb2d4720dde88280816aca6dd81e7eee771af57d1e5743e681f30cd477c7"
},
{
"file": "scripts/ledger-cycle-setup.php",
"sha256": "bb7d475c86267cec6e4ea9612fe5e68bd416ef572a2872b87eaa5ea135586b3d"
},
{
"file": "scripts/ledger-cycle-cases.php",
"sha256": "8b8814188c4a9083437376a5ccf853981a23c3093586b042f539ed3a82a49c13"
},
{
"file": "scripts/ledger-cycle-security.php",
"sha256": "492c09947e9bd05c254f7ca1ed9ec44eb80d0e7550efb3f1bbc0698b906dd8d6"
},
{
"file": "scripts/ledger-cycle-race.php",
"sha256": "7767eae356faceb540394020ae1e659708644955078b9b1ea83269151313fa0e"
},
{
"file": "scripts/ledger-cycle-final.php",
"sha256": "9fe66b2464f32c64f06c6b358806de26613a95b34e7a52db77f26d3ef9d1a4aa"
},
{
"file": "scripts/ledger-http-entry.php",
"sha256": "0afc132563999f9a50f9379bacbc4f22e71dc792bd5742f1bf65497dab480b5c"
},
{
"file": "scripts/payable-history-sgf-proof.php",
"sha256": "36eaefcb5971869bf8f8cf097ddb0fee8676f430edb462b7832bdad753d988f6"
},
{
"file": "scripts/ledger-cycle-native-run.mjs",
"sha256": "661da838b9203c35308f452edfcee34567f86bbb7ed8f55bbe1f39319ed63c58"
},
{
"file": "scripts/ledger-cycle-native-proof.php",
"sha256": "24adbda508c6c433abf8f4833fbcb3d7adf8f4702fb6121870197693dc93038f"
},
{
"file": "scripts/ledger-cycle-native-http-router.php",
"sha256": "7b0368fb311e01d821bf337678dedf930ea2c39e958609095eaca65ac1344392"
},
{
"file": "scripts/ledger-cycle-http.mjs",
"sha256": "1c77bf427a5bae06a480002c09d2361fe237fe4f799dd047fe825312d25f6977"
},
{
"file": "scripts/ledger-cycle-native-demo.mjs",
"sha256": "e037c772f567a1b81b4c3a09239c6e7db02c2815dee6d766caf697240b41f8aa"
},
{
"file": "scripts/ledger-cycle-demo-check.mjs",
"sha256": "818663a991eecb2af30bbb1ccbfae4b4f2ddc5b7564e7bfcf86a573d9857ae9e"
},
{
"file": "scripts/summarize-ledger-cycle.mjs",
"sha256": "6b8419cbd063d731ea491234b755a2aa1c56b34a2d4c4acdf3f8b8f14e080ec2"
},
{
"file": "docs/GENERAL_LEDGER_COMPLETE_SYNTHETIC_SCOPE.md",
"sha256": "5d7fed6d7ba6a0c44a95465d1ce3c76e0a788f44630ac35dafec2b5c3d58cf65"
},
{
"file": "docs/GENERAL_LEDGER_COMPLETE_CYCLE_DELIVERY.md",
"sha256": "424a6d9de6f3a02c4ff691df7e045cbf1fd42838bf20c03cca61dcc79c390b2d"
},
{
"file": "../compras/docs/contabilidade-ciclo-sintetico.md",
"sha256": "5930a20ea13b3b7d1cb433de9eae05c12a1abd867093cd1787dc24f8e48882f1"
}
],
"team_demos": [
{
"tag": "f729b545c0b6",
"pid": 19488,
"url": "http://127.0.0.1:8050/qa/ledger-demo",
"loopback_only": true,
"cookie": "sgf_ledger_f729b545c0b6",
"new_isolated_team_fixture": true,
"existing_demos_untouched": true
},
{
"tag": "18278bfce5c2",
"pid": 4012,
"url": "http://127.0.0.1:8051/qa/ledger-demo",
"loopback_only": true,
"cookie": "sgc_ledger_18278bfce5c2",
"new_isolated_team_fixture": true,
"independent_financial_book": true,
"existing_demos_untouched": true
}
],
"core_source_single": true,
"native_adapter_implemented": true,
"installed_native_package_replaced": false,
"destination_flags_enabled": false,
"rights": {
"distinct_ledger": 10,
"ledger_grants_per_new_fixture": 12,
"financial_rights_existing_and_qa_only": true,
"real_grants": 0
},
"preservation": {
"six_pending_associations_untouched": true,
"blocked_cache_not_cleared": true,
"old_demos_not_reset": true,
"unrelated_work_preserved": true
},
"limits": {
"visual_review_pending": true,
"deployment_capacity_validated": false,
"live_sgf_purchasing_source": false,
"real_chart_or_tax_policy": false,
"reopening": false,
"bank_execution": false,
"monetary_operations": false,
"new_benchmarks": false,
"new_indexes": false,
"publication": false,
"purchasing_activation": false,
"checkpoint": false,
"acceptance_presumed": false
}
}
@@ -0,0 +1,364 @@
{
"increment": "COMMON-LEDGER-COMPOSITION-SIM-v1",
"consolidated_at_utc": "2026-11-03T05:37:37.042Z",
"functional_code": true,
"synthetic_only": true,
"status": "implemented_and_tested_with_limits",
"authorization": "Existing approved Sales, Supplier and Direct Cost Correction effects composed; no new effect type or real grant.",
"tests": {
"regression": {
"passed": true,
"checks": 37,
"cases": [
{
"name": "bounded-recorded-source-panels",
"checks": 8,
"passed": true
},
{
"name": "each-live-source-right-and-whole-book-right",
"checks": 17,
"passed": true
},
{
"name": "eligible-foreign-contexts",
"checks": 3,
"passed": true
},
{
"name": "independent-pagination-no-per-row-source-queries",
"checks": 4,
"passed": true
},
{
"name": "unavailable-provider-not-zero",
"checks": 1,
"passed": true
},
{
"name": "feature-default-off-and-complete-period-blocker",
"checks": 2,
"passed": true
},
{
"name": "sql-three-lines-only-for-invoice",
"checks": 1,
"passed": true
}
],
"rollback_only": true,
"private_synthetic_database_only": true,
"preservation_verified": true
},
"combined_workflow": {
"passed": true,
"checks": 16,
"invoice_id": 1,
"obligation_id": 1,
"receipts": [
2,
3
],
"allocations": [
3,
5
],
"reversal_effect_id": 6,
"invoice_journal_id": 3,
"journals": 8,
"lines": 17,
"gross_debit_minor": 330500,
"gross_credit_minor": 330500,
"client_balance_minor": 40000,
"financial_balance_minor": 40000,
"period_closed": true,
"origin_unchanged": true,
"combined_checks": 31,
"source_outbox_rights_preserved": true,
"supplier_balance_minor": 6000,
"cost_balance_minor": 29500,
"typed_source_filters_separate": true,
"joint_period_closed": true
},
"open_http": {
"passed": true,
"checks": 36,
"actual_http": true,
"actual_csrf": true,
"period_closed": false,
"read_only_repeatable_read": true,
"writer_locks": 0,
"independent_pagination": true,
"visual_review": false
},
"closed_http": {
"passed": true,
"checks": 35,
"actual_http": true,
"actual_csrf": true,
"period_closed": true,
"read_only_repeatable_read": true,
"writer_locks": 0,
"independent_pagination": true,
"visual_review": false
},
"team_http_forms": {
"passed": true,
"checks": 34,
"roles": 3,
"no_business_commands": true,
"forms_mock_checks": 4,
"actual_browser": false,
"visual_review": false,
"initial_journals": 1,
"initial_groups": 0,
"initial_customer_openings": 0,
"initial_closures": 0
},
"team_preservation": {
"passed": true,
"all_business_source_outbox_rights_book_hashes_unchanged": true,
"initial_journals": 1,
"initial_corrections": 0,
"initial_customer_effects": 0,
"initial_closures": 0,
"real_or_public_grants": 0,
"new_effect_types": 0,
"no_reset": true
}
},
"targeted_checks": 173,
"private_evidence": [
{
"file": "private/ledger-2d5c71abf625/composition-cases.json",
"sha256": "60a673e638b13d1cc857caf1f55df91bc0f9167c2d8033167967d9c2f8730d14"
},
{
"file": "private/ledger-2d5c71abf625/composition-workflow.json",
"sha256": "3f0e666f167f968b93111bd4babe8a97c9e63f577088bcb3bbb2df4462ac9d83"
},
{
"file": "private/ledger-2d5c71abf625/composition-http.json",
"sha256": "3ae0f4655159c2a7dbeeda444961766cbc137b6b3dfb7d0be602fd57a2404354"
},
{
"file": "private/ledger-01aab3ebad2d/composition-http.json",
"sha256": "5dda618a2105424afeeb62bb4337d3e5769593c7b7ff307edf2a119d47cae718"
},
{
"file": "private/ledger-fe42e1169ce6/composition-demo-http.json",
"sha256": "f0c530c0da7828aa947a925260feb1a9bfbcb47a5be3127f9debd4a516d54c36"
},
{
"file": "private/ledger-fe42e1169ce6/composition-demo-preservation.json",
"sha256": "f026956ec057e0f1c58246e4e57bddbef7782be4549238dcf724cb6d40beb3ff"
}
],
"reused_manifests": [
{
"file": "docs/proofs/common-ledger-direct-cost-correction-20261103.json",
"sha256": "2111a30006d24f4325c6f4292e9ffb567adf28950ffbfa76fbb9e8143a2fedb7",
"valid_private_artifacts_reused": true
},
{
"file": "docs/proofs/common-ledger-direct-cost-20261103.json",
"sha256": "5354ac34eb27dd9c05564d8eb9694a90c3e8eceaf018e2873aa299aa54b6cf6e",
"valid_private_artifacts_reused": true
},
{
"file": "docs/proofs/common-ledger-sales-receivable-20261103.json",
"sha256": "b5572466111fb85d89a604fbaa423976ed17c61afc5e2e45ba392fb23aa82e8c",
"valid_private_artifacts_reused": true
},
{
"file": "docs/proofs/common-ledger-reports-20261103.json",
"sha256": "83b81a3401e4cfe8ea4c9d13339385f9241d0eefee5495da3e767812f0c863f1",
"valid_private_artifacts_reused": true
},
{
"file": "docs/proofs/common-ledger-complete-cycle-20261102.json",
"sha256": "23657d594b84e6aeeb0d16d45790d54feca04b12e2260cfffa4f8e4a37eaa0ce",
"valid_private_artifacts_reused": true
},
{
"file": "docs/proofs/common-finance-bundle-20261103.json",
"sha256": "086c1556e7cefcf64a7064995a4aa6bd0e3aa9dd62cba66285b7801715f9f22c",
"valid_private_artifacts_reused": true
}
],
"prior_private_artifacts_verified": 83,
"frozen_bundles": [
{
"files": 25,
"manifest_sha256": "6a507ea7d708a12a8e526e4c610696d8db84079d18aede470237b65505630e7e",
"all_bytes_preserved": true
},
{
"files": 30,
"manifest_sha256": "cbc4ddbea15f5e396c92bc2e664b973138551928980f334bcf3eb0cf097cacb1",
"all_bytes_preserved": true
}
],
"quality": {
"syntax": {
"php": 13,
"js": 5
},
"diff_check_both_repositories": true,
"business_suites_unrelated_not_repeated": true
},
"source_files": [
{
"file": "app/Modules/Accounting/LedgerComposition.php",
"sha256": "f763ef25a76072938f9c42d38df83546fa4d8b875af916f86eb88ed74c9d9790"
},
{
"file": "app/Modules/Accounting/LedgerCompositionController.php",
"sha256": "f41796bd97cdbfab637353122c16383895b1754c1e2f0839cb743783718fca63"
},
{
"file": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "6cb67269c1df67448c1f9c4510c2df468f133c8e7e6e8b49a4d49b50b53e5528"
},
{
"file": "packages/general-ledger/src/PayableJournal.php",
"sha256": "10858e5eccc698936575a48aee4aa189a4f49d0430e498c9299460c36b577740"
},
{
"file": "packages/general-ledger/src/SalesSchema.php",
"sha256": "2b641ca2aca5b750b981cf1c1cbc63709b7acc941bbe6c777c9c176ef0f71dae"
},
{
"file": "config/general_ledger.php",
"sha256": "4e825f937acd41c3493b1f10ccabd0b1b35ee69aa732c4b04ae422391f3a5918"
},
{
"file": "routes/web.php",
"sha256": "6bc90b2d3b5f77f6f48d4a42889ed11b51b76abbad3bc347d4a05339ee04f5b7"
},
{
"file": "scripts/payable-history-sgf-proof.php",
"sha256": "84afd2163b025171cbb3dfd55b019a326caaf90376a90cee21174d44c63cd2cc"
},
{
"file": "scripts/ledger-cost-proof.php",
"sha256": "6cc1e1f7b80125d0d6f7ac85591cd71129edb98c9f4d7eb0d02f5e44e0705eb7"
},
{
"file": "scripts/ledger-cost-http-entry.php",
"sha256": "3dd702389eabe2e813eb46cb25db6c747b4bc54a02cc30377422070853428784"
},
{
"file": "scripts/ledger-cost-demo.mjs",
"sha256": "59e86f3d067c8002c5ddd9729fbb8c02bfb2bdcc3bef39b5caf1df19fd7c1afc"
},
{
"file": "scripts/ledger-run.mjs",
"sha256": "50111e68cc51811b476fe5761189197fb30aa3c6253db489639cdb8b18087f7a"
},
{
"file": "scripts/ledger-composition-cases.php",
"sha256": "294864a6da5f462a6020f0c54e18d8a092c076b313c54eb71ed6ef1175f8d40d"
},
{
"file": "scripts/ledger-composition-demo-check.mjs",
"sha256": "3b7061cb3465a4c8efa5b431c20c9fd7dab1e321c3cdb5a1f63cd550a49f2bf4"
},
{
"file": "scripts/ledger-composition-http.mjs",
"sha256": "e51fa6afb8a836b64dcd774cf0a11d9fb0e2016d902778f50c734e915ac69e7c"
},
{
"file": "scripts/ledger-composition-proof.php",
"sha256": "c05b6120db56bc3e8982495d4b60d63f7f5b3241eb45430b6e921302aba12f06"
},
{
"file": "scripts/ledger-composition-workflow.php",
"sha256": "01ee8f53997b78a81c911414f003eb641d02a3ed6ecaef44261edd2a75b71107"
},
{
"file": "scripts/summarize-ledger-composition.mjs",
"sha256": "c6101073abcdb7b42607f7c2b996a69f2d389a5562d65562ab26523675b6d2c2"
},
{
"file": "resources/views/accounting/ledger-composition.blade.php",
"sha256": "fa214ad9a180f944648149e4e8c8f0652addef6a866c397b9c91de995c65746f"
},
{
"file": "resources/views/accounting/ledger-composition-demo-entry.blade.php",
"sha256": "1266df5a8b9c8b96ee6b29d9b1085af73fa260d88c23c7dcf78459a36963570a"
},
{
"file": "resources/views/accounting/general-ledger.blade.php",
"sha256": "b756726ae2d5b3d17e490cd33067e85d9f842673ce579ba1f4cd14105bc893d7"
},
{
"file": "docs/GENERAL_LEDGER_COMPOSITION_DELIVERY.md",
"sha256": "cecec59b64adff6eb9cb32d183b809f187170b818155d6d8adead382ec460dc5"
},
{
"file": "docs/GENERAL_LEDGER_INDUSTRIAL_SCOPE.md",
"sha256": "6044a9471b741db010f6d0509aacb56609624b05e83489311f8f5340cced108d"
},
{
"file": "README.md",
"sha256": "c3082f0f4c2b73346feac6b689b36ff8260bc8d566f3872e2e5a2c55088ceae2"
},
{
"file": "docs/PRODUCT_DEMO.md",
"sha256": "84d7870c345cb3367f151152082329bd93dfd62ef4c85c839fec386b1c6adace"
},
{
"file": "docs/SGF_MODULE_FLOW_PREPARATION.md",
"sha256": "d3b5d011e2c50db71806d6c90a43559ee3d77089060ff29c94fd23cb3dcb30be"
}
],
"team_demo": {
"tag": "fe42e1169ce6",
"pid": 17896,
"url": "http://127.0.0.1:8057/qa/cost-demo",
"cookie": "sgf_cost_fe42e1169ce6",
"loopback_only": true,
"separate_team_database": true,
"old_demos_not_reset": true
},
"observed_result": {
"journals": 8,
"lines": 17,
"debit_minor": 330500,
"credit_minor": 330500,
"client_balance_minor": 40000,
"cost_balance_minor": 29500,
"supplier_balance_minor": 6000,
"closed_periods": 1
},
"preservation": {
"six_pending_records_untouched": true,
"blocked_cache_untouched": true,
"old_demonstrations_not_reset": true,
"source_outbox_rights_preserved": true,
"private_credentials_not_versioned": true,
"unrelated_work_preserved": true,
"destination_unchanged": true
},
"limits": {
"visual_review_pending": true,
"actual_browser": false,
"new_large_volume_measurements": false,
"deployment_capacity_validated": false,
"all_six_modules_operationally_complete": false,
"purchasing_activation": false,
"stock_valuation": false,
"payroll_or_industrial_posting": false,
"real_or_public_grants": false,
"published": false,
"checkpoint": false,
"acceptance_presumed": false
},
"next_proposed_scope": {
"file": "docs/GENERAL_LEDGER_INDUSTRIAL_SCOPE.md",
"sha256": "6044a9471b741db010f6d0509aacb56609624b05e83489311f8f5340cced108d",
"authorization_required": true,
"not_implemented": true
}
}
@@ -0,0 +1,686 @@
{
"increment": "COMMON-LEDGER-DIRECT-COST-SIM-v1",
"consolidated_at_utc": "2026-11-02T23:23:09.131Z",
"authorization": {
"answer": "Autorizar o ciclo sintético proposto",
"scope_archive_matches_presented_proposal": true,
"approved_scope_sha256": "fda42b728512b5fc554db4dcd67a5b652aa1bdfd1e44b1de93b32a7d694aaf92"
},
"status": "implemented_and_tested_with_explicit_limits",
"functional_code": true,
"synthetic_only": true,
"tests": {
"actual_workflow": {
"passed": true,
"journal_id": 1,
"journals": 1,
"lines": 2,
"debit_minor": 27500,
"credit_minor": 27500,
"source_outbox_rights_fingerprint_unchanged": true,
"same_and_other_key_no_duplication": true,
"period_closed": true,
"trial_balance_and_account_ledger_reconciled": true
},
"defaults": {
"passed": true,
"default_without_environment": false,
"owned_cost_only_qa_runtime": true,
"sales_not_enabled": true,
"real_environment_not_changed": true
},
"regression": {
"passed": true,
"checks": 27,
"cases": [
{
"name": "complete-source-rights-and-explicit-impact",
"checks": 7,
"passed": true
},
{
"name": "partial175-and-non-cent-representable-cost",
"checks": 3,
"passed": true
},
{
"name": "exact-rational-no-rounding",
"checks": 2,
"passed": true
},
{
"name": "revoked-source-rights-and-old-capture",
"checks": 1,
"passed": true
},
{
"name": "revoked-rights-before-recovery",
"checks": 1,
"passed": true
},
{
"name": "source-access-and-person-independence",
"checks": 2,
"passed": true
},
{
"name": "fault-boundaries-atomic-recovery",
"checks": 5,
"passed": true
},
{
"name": "stable-perimeter-no-second-recognition-and-close-refusal",
"checks": 3,
"passed": true
},
{
"name": "guards-and-perimeter-immutability",
"checks": 2,
"passed": true
}
],
"rollback_only": true,
"source_outbox_rights_unchanged": true,
"no_rounding_or_duplicate_recognition": true
},
"security": {
"passed": true,
"checks": 10,
"eligible_foreign_unit_company_tenant_refused": true,
"three_live_view_rights_rechecked": true,
"actual_unverified_successor_refused": true,
"no_inherited_verification": true,
"rollback_only": true,
"source_outbox_rights_unchanged": true
},
"actual_http": {
"passed": true,
"checks": 51,
"actual_http": true,
"actual_csrf": true,
"principal_minor": 27500,
"journals": 1,
"lines": 2,
"source_events": 3,
"report_reconciled": true,
"typed_cost_origin_link": true,
"one_reviewed_qa_close": true,
"repeated_keys_and_source_no_duplicates": true,
"read_only_workspace": true,
"writer_locks": 0,
"visual_review": false
},
"http_final": {
"passed": true,
"source_outbox_rights_fingerprint_unchanged": true,
"journals": 1,
"lines": 2,
"closures": 1,
"closed_ui_has_no_commands": true,
"debit_minor": 27500,
"credit_minor": 27500
},
"ui_postcheck": {
"passed": true,
"cost_order_not_mislabelled_as_debt": true,
"typed_filter_journals": 1,
"typed_filter_events": 3,
"generic_diary_and_account_report_source_links": true,
"read_only_postcheck": true
},
"concurrency": {
"passed": true,
"workers": 6,
"stale_post_after_committed_rate_version": {
"waiting": {
"a": {
"chain_reaches_parent": true,
"wait_event": "transactionid"
}
},
"read_before_release": {
"status": 200,
"amount_minor": 27500,
"journals": 0
},
"results": {
"a": {
"status": 409,
"message": "Cálculo actual completo e validado distintamente obrigatório; custo conhecido parcial não é total."
}
},
"changed_effect_id": 3
},
"fresh_posting": {
"waiting": {
"b": {
"chain_reaches_parent": true,
"wait_event": "transactionid"
},
"a": {
"chain_reaches_parent": true,
"wait_event": "tuple"
}
},
"read_before_release": null,
"results": {
"a": {
"status": 200,
"result": {
"state": "posted",
"proposal_id": 2,
"journal_id": 1,
"replayed": false
}
},
"b": {
"status": 200,
"result": {
"state": "posted",
"proposal_id": 2,
"journal_id": 1,
"replayed": false
}
}
},
"changed_effect_id": null
},
"fresh_period_close": {
"waiting": {
"b": {
"chain_reaches_parent": true,
"wait_event": "transactionid"
},
"a": {
"chain_reaches_parent": true,
"wait_event": "tuple"
}
},
"read_before_release": null,
"results": {
"a": {
"status": 200,
"result": {
"state": "closed",
"closure_id": 1,
"period_version": 2,
"replayed": false
}
},
"b": {
"status": 200,
"result": {
"state": "closed",
"closure_id": 1,
"period_version": 2,
"replayed": false
}
}
},
"changed_effect_id": null
},
"read_finished_before_writer_release": true,
"same_cost_amount_minor": 27500,
"new_calculation_version": 2,
"journals": 1,
"lines": 2,
"closures": 1,
"technical_original_calculation_and_original_outbox_unchanged": true,
"all_outbox_still_captured_no_accounting": true
},
"team_http_and_forms": {
"passed": true,
"checks": 22,
"three_declared_accounting_roles": true,
"actual_validated_cost_minor": 27500,
"initial_proposals": 0,
"initial_journals": 0,
"initial_closures": 0,
"no_business_commands": true,
"private_existing_build": true,
"rendered_forms_mock_checks": 4,
"actual_browser": false,
"visual_review": false
},
"team_preservation": {
"passed": true,
"new_team_fixture": true,
"declared_synthetic_actors": 5,
"unlisted_users_with_grants": 0,
"actual_validated_cost_minor": 27500,
"no_accounting_decisions_or_effects": true,
"outbox_captured_no_accounting": true,
"source_fingerprint": "fbdfd4e86488a2f68fb41803992ba7f556952523a217178685c8dd98714f7bd9"
},
"supplier_writer_compatibility": {
"passed": true,
"cases": [
{
"name": "prepare-independent-review-post-and-source-reconciliation",
"assertions": 9,
"passed": true
},
{
"name": "repetition-conflicting-key-and-recovery-after-period-version",
"assertions": 6,
"passed": true
},
{
"name": "rights-revoked-actor-person-and-no-inheritance",
"assertions": 4,
"passed": true
},
{
"name": "independence-rejection-and-preparer-ownership",
"assertions": 6,
"passed": true
},
{
"name": "source-rule-period-latest-capture-and-revision-changes",
"assertions": 10,
"passed": true
},
{
"name": "invalid-period-accounts-currency-foreign-scopes-and-extra-fields",
"assertions": 10,
"passed": true
},
{
"name": "failure-at-every-posting-boundary-and-idempotent-recovery",
"assertions": 12,
"passed": true
},
{
"name": "database-balance-guards-and-append-only-history",
"assertions": 16,
"passed": true
}
],
"assertions": 74,
"financial_fingerprint_equal": true,
"all_test_journals_rolled_back": true
},
"sales_compatibility": {
"passed": true,
"actual_sales_source_matches_original_posted_snapshot": true,
"single_sales_provider_hash_unchanged": true,
"existing_trial_balance_debit_minor": 240000,
"cost_default_off": true,
"no_business_commands": true
},
"native_uncomposed_refusal": {
"passed": true,
"uncomposed_cost_refused": true,
"cost_schema_not_required": true,
"no_proposal_or_effect_created": true
},
"cost_supplier_coexistence": {
"passed": true,
"coinciding_order_supplier_obligation_ids": true,
"one_writer": true,
"cost_filter_journals": 1,
"cost_filter_events": 3,
"supplier_filter_journals": 1,
"supplier_filter_events": 3,
"journals": 2,
"lines": 4,
"debit_minor": 33500,
"credit_minor": 33500,
"actual_selected_cost_minor": 27500,
"supplier_balance_minor": 6000,
"cost_source_and_outbox_unchanged": true,
"joint_qa_period_closed": true,
"supplier_receipt_controlled_synthetic_not_live_import": true,
"no_payment_or_stock_effect": true
}
},
"evidence": [
{
"file": "private/ledger-6d0ea9e319e0/cost-workflow.json",
"sha256": "a19473225be09808b45311a14dcfa72ebe1d1dee874b20ec3fb6a17d785d1acb"
},
{
"file": "private/ledger-6d0ea9e319e0/cost-defaults.json",
"sha256": "33f35dfab53f491bc546e22d9ffca58d24951b9cb593866214680d7a17a8b49e"
},
{
"file": "private/ledger-6c9ec47c310e/cost-cases.json",
"sha256": "e85735a28cc7fb18a9f94e65108395a6474092901c5a7319e81457831d6dd126"
},
{
"file": "private/ledger-6c9ec47c310e/cost-security.json",
"sha256": "5a4a46c181e396a1fef1d8aab006d20b1c986d38e1388ef90e233e41c0d5eb97"
},
{
"file": "private/ledger-6c9ec47c310e/cost-http.json",
"sha256": "7af9deeeba9a9ecb0aa66ee917194a2dedbdc4bb46649aa6d137df97c8259cca"
},
{
"file": "private/ledger-6c9ec47c310e/cost-http-final.json",
"sha256": "9127aab59de61d07d760ba3465288f26a943346ea1f230066b2237a264c3c906"
},
{
"file": "private/ledger-6c9ec47c310e/cost-ui-postcheck.json",
"sha256": "62ddec3aab42dd9dab56d0334af61dba1a6a79b8b725d9bfeb01f1e982cb91fb"
},
{
"file": "private/ledger-5e566833f610/cost-race.json",
"sha256": "0c3e3d32f748ca22ae9fa9eae8259f9861276ded414a50cefdcc5e0b465796a8"
},
{
"file": "private/ledger-6a73790314ce/cost-demo-http.json",
"sha256": "17f994271da5d70bc7124686ad125ecb6cb918d8663ff3c24e647d535660863e"
},
{
"file": "private/ledger-6a73790314ce/cost-demo-preservation.json",
"sha256": "f9235884994993e9cd500989bc773ea8d74be40cde3e4668251a1e67a4bc63bc"
},
{
"file": "private/ledger-a6f36429ef4f/ledger-cases.json",
"sha256": "8197a2fa96f3dee1e85b411c94b5f72f4a45ac3eac14241bc0062faffb7a0ff8"
},
{
"file": "private/ledger-7dabce07b0c3/cost-extension-sales-compatibility.json",
"sha256": "8177d894753d44967f75b234940fe18ae7342d1a9ccffea4ffa96fe9aacbc083"
},
{
"file": "private/ledger-native-c5ff3a6aa5a3/cost-capability-refusal.json",
"sha256": "8b932c8a5d3c064da56d578430a6db20023016d58a79c8358c6804ac0b7ccc87"
},
{
"file": "private/ledger-3eafd03c8c3a/cost-coexistence.json",
"sha256": "40866ec5e98268123104d4b8c295589a5329bfe8969cd74829325b4befc0fe73"
},
{
"file": "private/ledger-cost-approved-scope.md",
"sha256": "fda42b728512b5fc554db4dcd67a5b652aa1bdfd1e44b1de93b32a7d694aaf92"
}
],
"previous_proofs": [
{
"file": "docs/proofs/common-ledger-reports-20261103.json",
"sha256": "83b81a3401e4cfe8ea4c9d13339385f9241d0eefee5495da3e767812f0c863f1"
},
{
"file": "docs/proofs/common-ledger-sales-receivable-20261103.json",
"sha256": "b5572466111fb85d89a604fbaa423976ed17c61afc5e2e45ba392fb23aa82e8c"
},
{
"file": "docs/proofs/common-finance-bundle-20261103.json",
"sha256": "086c1556e7cefcf64a7064995a4aa6bd0e3aa9dd62cba66285b7801715f9f22c"
},
{
"file": "docs/proofs/common-ledger-complete-cycle-20261102.json",
"sha256": "23657d594b84e6aeeb0d16d45790d54feca04b12e2260cfffa4f8e4a37eaa0ce"
}
],
"previous_private_artifacts_verified": 52,
"frozen_native_packages": [
{
"files": 25,
"manifest_sha256": "6a507ea7d708a12a8e526e4c610696d8db84079d18aede470237b65505630e7e",
"all_hashes_preserved": true,
"cost_extension_not_installed": true
},
{
"files": 30,
"manifest_sha256": "cbc4ddbea15f5e396c92bc2e664b973138551928980f334bcf3eb0cf097cacb1",
"all_hashes_preserved": true,
"cost_extension_not_installed": true
}
],
"sources": [
{
"file": "AGENTS.md",
"sha256": "df66a4b9278a5c5bea669dc29fe02e85dc5d7842b3d9a89b8b8e76af7cfd8ed1"
},
{
"file": "config/cost_ledger.php",
"sha256": "64069dd558f87f2bb6b1f10bc2a0383fa63629cecb5b2f1f86a39cba3fed1b7b"
},
{
"file": "app/Shared/Testing/TestingDatabaseGuard.php",
"sha256": "963043d7a872422aab9e9e0b3746d0be841ae3aa1da795e50b6904121fc77dff"
},
{
"file": "app/Modules/Workshop/DirectCosts.php",
"sha256": "51f70a18731ed6371442f8e6364c52b163f46bf9b58c86b407b73f39fffb164c"
},
{
"file": "app/Modules/Purchasing/SupplierPayables.php",
"sha256": "5a07462a3f4cc06776fce3da98b42b188f26f1f32c3c7cb4bc37d46408b3be17"
},
{
"file": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "c2bbe4a6ff8d0deb4a298b6821cb762510670a573135d34dbabc87a03c140697"
},
{
"file": "app/Modules/Accounting/GeneralLedgerController.php",
"sha256": "671d853f1d6784588e8a5f374c2b377d98de016a788bd81a38d3f8b12121eb70"
},
{
"file": "app/Modules/Accounting/CostLedgerController.php",
"sha256": "5491d1eb03daaf278d18eeebc3867a6ab8a8c917fd91cfee5f3e611d28042b82"
},
{
"file": "app/Modules/Accounting/CostLedgerSource.php",
"sha256": "7951fbbde11783805b82ab7d682be38ae9666bae70292f92e2d86cff7f390330"
},
{
"file": "packages/general-ledger/bootstrap.php",
"sha256": "6fdaa73b95c14f000ead649eb37d5d5926f79034250c5b4bcf910c3d95845f0e"
},
{
"file": "packages/general-ledger/README.md",
"sha256": "09aba8ccb95da4fa8303a02d85349776bec5af4d374be0194dadd0dedfab8d26"
},
{
"file": "packages/general-ledger/src/LedgerSchema.php",
"sha256": "1fb2490fe8d4d206d2f8157803307cdd4e2f733150d0fec4993a7e229fce58cb"
},
{
"file": "packages/general-ledger/src/CycleSchema.php",
"sha256": "25407f9ea4321ee3acb0c310b5d981b8fdaf89c5464d32878ecc57c29e60972d"
},
{
"file": "packages/general-ledger/src/CostSchema.php",
"sha256": "da0919e6aeab83a572d1171b1f641b62593f1a0157a51ec988ecbdacda0a9942"
},
{
"file": "packages/general-ledger/src/PayableJournal.php",
"sha256": "7a4f01e6f0dfcf9845574e9f316bade3fde7b97a3ba806128c8fc452754b44aa"
},
{
"file": "packages/general-ledger/src/LedgerCycle.php",
"sha256": "0f3bd409ccd71df153806ff654dfe74bac2dd053526f53bcba7e46f40d2f5e0b"
},
{
"file": "packages/general-ledger/src/LedgerSales.php",
"sha256": "ea21a8376705e413b824513d30243c271870b2bfbc7a9af2fd922916a145e130"
},
{
"file": "packages/general-ledger/src/LedgerReports.php",
"sha256": "f0f271114229eab097808aa4ee0d50b47805524dc87c7d7c8d7f248e91705344"
},
{
"file": "packages/general-ledger/src/ReportsWorkspace.php",
"sha256": "46238afbb708b6c111b90a8bb79f5dd6ae9b1189e926746efefeef497ff1fc33"
},
{
"file": "packages/general-ledger/ui/reports.php",
"sha256": "ae34b86e21cbdd42bceced8c4e260a7b360c819078b3a5c410219e2d24890d90"
},
{
"file": "resources/views/accounting/general-ledger.blade.php",
"sha256": "7107bb48054a41f955a979d101784e1ffcdaa8949bb5f9b6a5bf89bfd5708b0a"
},
{
"file": "resources/views/accounting/cost-ledger.blade.php",
"sha256": "7459009383cd7561443259beb9a446d6a872a4571193c468628a10fad6eb0934"
},
{
"file": "resources/views/accounting/cost-demo-entry.blade.php",
"sha256": "17c39f5537acdc34ddd4b5ce181faded53a4c9f0661d5367fa2d60a6062d4f10"
},
{
"file": "routes/web.php",
"sha256": "8851966d45cd947f80deba9bb7854002d07ab759c0a3a216151c19ca117a1105"
},
{
"file": "scripts/payable-history-sgf-proof.php",
"sha256": "ebe4fb518e97cc3eeb81da1a14c045e85d25c942434279c90b8f3fba75018996"
},
{
"file": "scripts/ledger-run.mjs",
"sha256": "820041eb470c73fd94da785265c1f15e40570d12ebb04ccfcad3923227bc4c9b"
},
{
"file": "scripts/ledger-sales-proof.php",
"sha256": "eb69b99cc7b8a6da8578955f84a3603d4d80a54befb3c9b67415460332a75f70"
},
{
"file": "scripts/ledger-cycle-native-proof.php",
"sha256": "4a76e998dd4494a0c2c24174aa75eb0eb08940a84b4367a6c529dc7fcb2c4b39"
},
{
"file": "scripts/ledger-cost-cases.php",
"sha256": "8efd52d010b3f6fa4fd14c2010dfc9db07fcf704039aa52c5a2d0ca4df283f37"
},
{
"file": "scripts/ledger-cost-coexistence.php",
"sha256": "5425572beab3ea0ea24ed7d71ece66e46d8004ffd1394fcf0545e471b297ac4e"
},
{
"file": "scripts/ledger-cost-demo-check.mjs",
"sha256": "4c75ef4d551f5cfc8851cb325d2e15c5a8aea722ec5cb6d83330a526c729dec9"
},
{
"file": "scripts/ledger-cost-demo.mjs",
"sha256": "59e86f3d067c8002c5ddd9729fbb8c02bfb2bdcc3bef39b5caf1df19fd7c1afc"
},
{
"file": "scripts/ledger-cost-http-entry.php",
"sha256": "f6aaeec2685beb9c0696e78820f1e67740f063bb49e9db28272f45465f15a8ed"
},
{
"file": "scripts/ledger-cost-http-router.php",
"sha256": "1b659dd9fc57a9603a622d7556de8324a7e8291368a18e6fd6cb9ec0a3fe458a"
},
{
"file": "scripts/ledger-cost-http.mjs",
"sha256": "7595f1a93365b72c28e78c33a9b9842c314423a610e459292372969f8d1d1857"
},
{
"file": "scripts/ledger-cost-proof.php",
"sha256": "cc03422fa8d01946601eb699e8d95f4dfd4d040bc541089853045fa2a19ff481"
},
{
"file": "scripts/ledger-cost-race.php",
"sha256": "f7008fcca51176481344766e19b4fc8cbf4b2eecf85025661de9c39479c42b6f"
},
{
"file": "scripts/ledger-cost-security.php",
"sha256": "364abd336050f45de9ba46ec95746cc67882ba834d4f917e8a02c8990c41c2db"
},
{
"file": "scripts/archive-ledger-cost-scope.mjs",
"sha256": "b3b7f6e39dd7c2ac43f56e39fcaec380d17b6e58a63db6e1a0ab17a1abc86ff8"
},
{
"file": "scripts/summarize-ledger-cost.mjs",
"sha256": "a41a559270409845bb5ef3374878c0de102093f7d32fec29be0d843d21edd6ac"
},
{
"file": "docs/GENERAL_LEDGER_DIRECT_COST_SCOPE.md",
"sha256": "9bfa1d3b17a715714cfb1f5226564d9e1152eff3643c64f1874cf1f97783e69a"
},
{
"file": "docs/GENERAL_LEDGER_DIRECT_COST_DELIVERY.md",
"sha256": "d0c295cc7493ff066ed442566d6eaaebe7b9c00214e965a97e5a48677a257c77"
},
{
"file": "docs/GENERAL_LEDGER_DIRECT_COST_CORRECTION_SCOPE.md",
"sha256": "7b71bab9654cc0b4f5c4fa33a6728208c9450b6bccca887a86d157f1263396c4"
},
{
"file": "README.md",
"sha256": "5206e8369e696b56229e0d7213b6a089320c21608bb5dbe0703bd0b3c4a53afe"
},
{
"file": "docs/PRODUCT_DEMO.md",
"sha256": "166e27d1833bac15a2588102f44fb79e5edf0d2383b2396e6e7e71361b60c300"
},
{
"file": "docs/SGF_MODULE_FLOW_PREPARATION.md",
"sha256": "a39f19aeca52e9b65c7235e406af8176e045f39725c75138558a62dd3d42c988"
}
],
"quality": {
"syntax": {
"php_files": 29,
"javascript_files": 6
},
"git_diff_check_both_repositories": true,
"new_dependencies": false,
"sgf_phpstan_pint": "not_installed_not_run",
"native_application_code_unchanged_previous_quality_not_repeated": true
},
"rights": {
"distinct_ledger_rights": 7,
"ledger_grants_per_standard_cost_fixture": 9,
"existing_cost_and_technical_rights_only": true,
"real_or_public_grants": 0,
"mixed_supplier_fixture_additional_existing_qa_rights_only": true
},
"source": {
"actual_workshop_and_cost_workflows": true,
"known_selected_direct_cost_minor": 27500,
"full_cost_or_margin": false,
"automatic_outbox_processing": false,
"identity_stable_per_order_and_selected_perimeter": true,
"correction_of_already_posted_cost": false
},
"team_demo": {
"tag": "6a73790314ce",
"pid": 27284,
"url": "http://127.0.0.1:8054/qa/cost-demo",
"cookie": "sgf_cost_6a73790314ce",
"loopback_only": true,
"separate_team_database": true,
"old_demos_not_reset": true
},
"preservation": {
"six_pending_records_untouched": true,
"blocked_cache_not_cleared": true,
"existing_demos_not_reset": true,
"source_history_outbox_preserved": true,
"existing_valid_proofs_preserved": true,
"unrelated_work_preserved": true,
"destination_package_unchanged": true
},
"next_scope": {
"file": "docs/GENERAL_LEDGER_DIRECT_COST_CORRECTION_SCOPE.md",
"sha256": "7b71bab9654cc0b4f5c4fa33a6728208c9450b6bccca887a86d157f1263396c4",
"status": "proposal_only_requires_explicit_authorization",
"implemented": false
},
"limits": {
"visual_review_pending": true,
"actual_browser": false,
"large_volume_load_not_measured": true,
"deployment_capacity_validated": false,
"new_indexes": false,
"all_six_modules_operational_composition": false,
"real_chart_or_cost_policy": false,
"stock_valuation_or_posting": false,
"payroll_or_industrial_cost_posting": false,
"real_financial_operations": false,
"cost_correction_or_revaluation": false,
"reopening": false,
"destination_migrations_or_grants": false,
"publication": false,
"purchasing_activation": false,
"acceptance_presumed": false,
"checkpoint": false
}
}
@@ -0,0 +1,668 @@
{
"increment": "COMMON-LEDGER-DIRECT-COST-CORRECTION-SIM-v1",
"consolidated_at_utc": "2026-11-03T05:18:18.685Z",
"authorization": {
"answer": "Autorizar a correcção sintética proposta",
"scope_archive_matches_presented_proposal": true,
"approved_scope_sha256": "7b71bab9654cc0b4f5c4fa33a6728208c9450b6bccca887a86d157f1263396c4"
},
"functional_code": true,
"synthetic_only": true,
"status": "implemented_and_tested_with_explicit_limits",
"tests": {
"actual_source_setup": {
"passed": true,
"original_journal_id": 1,
"original_journal_sha256": "db5c9af341f544b0c6cb0b0fad4b4e2c8d79f7dea7078576b4d10b3d052008c3",
"original_calculation_sha256": "7917c0951c5737ad86037b9742751f5582abb93e678c4cd2e6993eee44639980",
"replacement_rate_id": 3,
"replacement_calculation_id": 2,
"original_minor": 27500,
"replacement_minor": 29500,
"difference_minor": 2000,
"source_fingerprint": "fe005fcf3bbac3631f00b6bfe460cbb7a54ba0a141e1f2f7f713be2e87bd4730",
"no_correction_groups_yet": true
},
"actual_complete_workflow": {
"passed": true,
"journals": 3,
"lines": 6,
"correction_groups_applied": 1,
"gross_debit_minor": 84500,
"gross_credit_minor": 84500,
"cost_balance_minor": 29500,
"net_difference_minor": 2000,
"original_cost_calculation_source_outbox_rights_unchanged": true,
"same_and_other_key_single_pair": true,
"period_closed": true,
"reports_reconciled": true
},
"defaults": {
"passed": true,
"default_without_environment": false,
"explicit_new_qa_runtime": true,
"real_environment_unchanged": true
},
"regression": {
"passed": true,
"cases": [
{
"name": "explicit-asymmetric-impact-and-indivisible-application",
"checks": 7,
"passed": true
},
{
"name": "faults-at-pair-boundaries-rollback-and-recovery",
"checks": 7,
"passed": true
},
{
"name": "database-rejects-orphan-cost-reversal",
"checks": 1,
"passed": true
},
{
"name": "changed-source-version-requires-new-conference",
"checks": 4,
"passed": true
},
{
"name": "rights-person-and-replay-authority",
"checks": 2,
"passed": true
},
{
"name": "readers-foreign-original-disabled-capability-and-closed-period",
"checks": 5,
"passed": true
},
{
"name": "new-change-after-correction-blocks-close-no-implicit-chain",
"checks": 3,
"passed": true
}
],
"checks": 30,
"rollback_only": true,
"source_originals_outbox_rights_unchanged": true,
"asymmetric_pair_and_orphan_sql_enforced": true
},
"security": {
"passed": true,
"checks": 8,
"eligible_foreign_tenant_company_unit_refused": true,
"four_live_rights_revalidated": true,
"rollback_only": true,
"source_outbox_rights_unchanged": true
},
"actual_http": {
"passed": true,
"checks": 58,
"actual_http": true,
"csrf_and_context": true,
"indivisible_four_line_impact": true,
"isolated_public_parts_refused": true,
"original_minor": 27500,
"replacement_minor": 29500,
"delta_minor": 2000,
"journals": 3,
"lines": 6,
"applied_groups": 1,
"gross_minor": 84500,
"balance_minor": 29500,
"source_snapshot_unchanged": true,
"one_reviewed_close": true,
"read_only_workspace": true,
"writer_locks": 0,
"visual_review": false
},
"http_final": {
"passed": true,
"original_journal_calculation_source_outbox_rights_unchanged": true,
"journals": 3,
"lines": 6,
"results": 1,
"closures": 1,
"closed_ui_no_commands": true
},
"concurrency": {
"passed": true,
"workers": 6,
"stale_group_after_committed_version": {
"waiting": {
"a": {
"chain_reaches_parent": true,
"wait_event": "transactionid"
}
},
"read_before_release": {
"status": 200,
"amount_minor": 29500,
"journals": 1,
"results": 0
},
"results": {
"a": {
"status": 409,
"message": "Fonte, regra ou período mudaram; prepare nova conferência."
}
},
"changed_effect_id": 3
},
"fresh_pair": {
"waiting": {
"a": {
"chain_reaches_parent": true,
"wait_event": "transactionid"
},
"b": {
"chain_reaches_parent": true,
"wait_event": "tuple"
}
},
"read_before_release": null,
"results": {
"a": {
"status": 200,
"result": {
"state": "corrected",
"correction_id": 2,
"result_id": 1,
"reverse_journal_id": 2,
"replacement_journal_id": 3,
"replayed": false
}
},
"b": {
"status": 200,
"result": {
"state": "corrected",
"correction_id": 2,
"result_id": 1,
"reverse_journal_id": 2,
"replacement_journal_id": 3,
"replayed": false
}
}
},
"changed_effect_id": null
},
"fresh_close": {
"waiting": {
"a": {
"chain_reaches_parent": true,
"wait_event": "transactionid"
},
"b": {
"chain_reaches_parent": true,
"wait_event": "tuple"
}
},
"read_before_release": null,
"results": {
"a": {
"status": 200,
"result": {
"state": "closed",
"closure_id": 1,
"period_version": 2,
"replayed": false
}
},
"b": {
"status": 200,
"result": {
"state": "closed",
"closure_id": 1,
"period_version": 2,
"replayed": false
}
}
},
"changed_effect_id": null
},
"reader_finished_before_release": true,
"prepared_groups": 2,
"applied_groups": 1,
"journals": 3,
"lines": 6,
"closures": 1,
"cost_balance_minor": 29500,
"latest_cost_version": 3,
"original_journal_calculations_outbox_unchanged": true
},
"three_interface_postcheck": {
"passed": true,
"superseded_group_visible_without_action": true,
"cost_generic_and_legacy_cycle_hide_isolated_part_application": true,
"read_only": true
},
"cost_supplier_corrections": {
"passed": true,
"coinciding_order_and_supplier_obligation_ids": true,
"cost_typed_journals": 3,
"cost_typed_events": 9,
"supplier_typed_journals": 3,
"supplier_typed_events": 9,
"focused_cost_groups": 1,
"both_sql_pair_domains_validated": true,
"journals": 6,
"lines": 12,
"applied_groups": 2,
"gross_minor": 102500,
"current_cost_minor": 29500,
"supplier_balance_minor": 6000,
"source_original_outbox_preserved": true,
"joint_qa_close": true,
"controlled_supplier_receipt_not_live_import": true
},
"native_supplier_cycle": {
"passed": true,
"checks": 23,
"rollback_only": true,
"principal_minor": 6000,
"allocated_balance_minor": 4000,
"final_balance_minor": 6000,
"debit_minor": 22000,
"credit_minor": 22000,
"journals": 5,
"lines": 10,
"correction_pairs": 1,
"period_closed": true,
"obligation_id": 1,
"recognition_journal_id": 1,
"allocation_id": 1,
"reversal_id": 1,
"correction_id": 1,
"period_check_id": 1
},
"old_cost_mode": {
"passed": true,
"old_cost_source_matches_original_posted_snapshot": true,
"single_cost_period_provider_packet_preserved": true,
"new_correction_flag_default_off": true,
"new_correction_schema_absent": true,
"uncomposed_correction_refused403": true,
"old_ledger_grants_still9": true,
"no_business_writes": true
},
"old8054_preservation": {
"passed": true,
"old8054_source_outbox_rights_exact": true,
"correction_flag_off": true,
"correction_schema_absent": true,
"journals_observed": 0,
"no_business_writes": true
},
"team_readiness_and_forms": {
"passed": true,
"checks": 23,
"three_accounting_roles": true,
"original_minor": 27500,
"actual_successor_minor": 29500,
"initial_journals": 1,
"initial_groups": 0,
"initial_closures": 0,
"no_business_commands": true,
"rendered_forms_mock_checks": 5,
"actual_browser": false,
"visual_review": false,
"private_existing_build": true
},
"team_preservation": {
"passed": true,
"original275_present": true,
"actual_validated_successor295": true,
"original_source_outbox_rights_exact": true,
"initial_journals": 1,
"initial_correction_groups": 0,
"initial_closures": 0,
"ledger_grants": 12,
"distinct_ledger_rights": 10,
"no_business_writes": true
}
},
"evidence": [
{
"file": "private/ledger-e2ec7e0e3f38/cost-correction-fixture.json",
"sha256": "c05b25101dcd5bccfd0b1b4fa5762d5e71460dd597c01ef50bbd5ae4bf8686c3"
},
{
"file": "private/ledger-e2ec7e0e3f38/cost-correction-workflow.json",
"sha256": "70f071de9bf6d7dd19457675a1e515414ed2778badf1767a26b6ebc6ef8bec1c"
},
{
"file": "private/ledger-e2ec7e0e3f38/cost-correction-defaults.json",
"sha256": "03982abebd43c75e7a50a3ad4985e3ba7789653a9f79bec85105159ce93ed679"
},
{
"file": "private/ledger-c4c506a3c295/cost-correction-cases.json",
"sha256": "1c9f5ad3c2324309185f9215acba257cf7ac6296b5a983969fb2edb90fb01d6f"
},
{
"file": "private/ledger-c4c506a3c295/cost-correction-security.json",
"sha256": "0750db59f3a205b884bfabec035c862ff8ca39511d421064c0e44f2b9ebe769e"
},
{
"file": "private/ledger-c4c506a3c295/cost-correction-http.json",
"sha256": "fec1ab48d1d74f7332ca41c543307fa5d3e266a4f68473eb6224c849c43e0ba2"
},
{
"file": "private/ledger-c4c506a3c295/cost-correction-http-final.json",
"sha256": "05315ebf59f8301fcbdab8da4b334bccc0e1c154e480818fa8d83cae94dc10f7"
},
{
"file": "private/ledger-eee1a330c1bb/cost-correction-race.json",
"sha256": "974c304283d4505263d8ea6b2024326d18e9d8d52634f0bfc2324759fb5e931a"
},
{
"file": "private/ledger-eee1a330c1bb/cost-correction-ui-postcheck.json",
"sha256": "90e28087316f2bb74d3a7d0160ab7e1d33843a2aa24f77839c1a6d90a0eb91b6"
},
{
"file": "private/ledger-ac404fba21fd/cost-correction-coexistence.json",
"sha256": "557028c4221c6912a7790eb0a8bdeadbda4dee0013740096ece711cc800a0e4c"
},
{
"file": "private/ledger-native-0912930aea5b/native-cycle-cases.json",
"sha256": "e79f0c9c4423abbe8fac86ee5fe38ced1a3ced3491fd8db4229aaf5e461a2344"
},
{
"file": "private/ledger-6d0ea9e319e0/cost-correction-legacy-mode.json",
"sha256": "c904b02bf94068ff803fbc97acddea45bc330f46d3c156722ba9f9f4874f818f"
},
{
"file": "private/ledger-6a73790314ce/cost-demo-after-correction.json",
"sha256": "4ee4263136ddbb8fbc662453141457de0d6063acf93235096990bf08ac32028b"
},
{
"file": "private/ledger-f3e0a05eb2ad/cost-correction-demo-http.json",
"sha256": "091ae9db0065595568ea5e8c7f39b4783ca10586030fcbe94a18a9b72a902e6a"
},
{
"file": "private/ledger-f3e0a05eb2ad/cost-correction-demo-preservation.json",
"sha256": "39aa598ac07239ce91141fe8e603212d493c56d42f3f598a9e90f6cbfe73cb93"
},
{
"file": "private/ledger-cost-correction-approved-scope.md",
"sha256": "7b71bab9654cc0b4f5c4fa33a6728208c9450b6bccca887a86d157f1263396c4"
}
],
"previous_proofs": [
{
"file": "docs/proofs/common-ledger-direct-cost-20261103.json",
"sha256": "5354ac34eb27dd9c05564d8eb9694a90c3e8eceaf018e2873aa299aa54b6cf6e"
},
{
"file": "docs/proofs/common-ledger-reports-20261103.json",
"sha256": "83b81a3401e4cfe8ea4c9d13339385f9241d0eefee5495da3e767812f0c863f1"
},
{
"file": "docs/proofs/common-ledger-sales-receivable-20261103.json",
"sha256": "b5572466111fb85d89a604fbaa423976ed17c61afc5e2e45ba392fb23aa82e8c"
},
{
"file": "docs/proofs/common-finance-bundle-20261103.json",
"sha256": "086c1556e7cefcf64a7064995a4aa6bd0e3aa9dd62cba66285b7801715f9f22c"
},
{
"file": "docs/proofs/common-ledger-complete-cycle-20261102.json",
"sha256": "23657d594b84e6aeeb0d16d45790d54feca04b12e2260cfffa4f8e4a37eaa0ce"
}
],
"previous_private_artifacts_verified": 67,
"frozen_native_packages": [
{
"files": 25,
"manifest_sha256": "6a507ea7d708a12a8e526e4c610696d8db84079d18aede470237b65505630e7e",
"all_hashes_preserved": true,
"not_replaced": true
},
{
"files": 30,
"manifest_sha256": "cbc4ddbea15f5e396c92bc2e664b973138551928980f334bcf3eb0cf097cacb1",
"all_hashes_preserved": true,
"not_replaced": true
}
],
"sources": [
{
"file": "AGENTS.md",
"sha256": "eecf5e761d4b9b9b673359399fafcc845d6e0277490cf601cf0582ee2538478a"
},
{
"file": "config/cost_ledger.php",
"sha256": "15cc9dfeb8877698e5b7553eeb3411a45ac3ad82ac4e23b4e38c4eb2f10cdf60"
},
{
"file": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "27791ca5599ab6059dd4c6f7c69a0bfb90165ad22249e3fb847bd8b6b9768958"
},
{
"file": "app/Modules/Accounting/CostLedgerSource.php",
"sha256": "8cbf64e69a189439202920d6094f8720247aab519ec14be7d91b0ba5908cdf97"
},
{
"file": "app/Modules/Accounting/GeneralLedgerController.php",
"sha256": "671d853f1d6784588e8a5f374c2b377d98de016a788bd81a38d3f8b12121eb70"
},
{
"file": "app/Modules/Accounting/CostLedgerController.php",
"sha256": "5491d1eb03daaf278d18eeebc3867a6ab8a8c917fd91cfee5f3e611d28042b82"
},
{
"file": "app/Modules/Workshop/DirectCosts.php",
"sha256": "51f70a18731ed6371442f8e6364c52b163f46bf9b58c86b407b73f39fffb164c"
},
{
"file": "app/Shared/Testing/TestingDatabaseGuard.php",
"sha256": "963043d7a872422aab9e9e0b3746d0be841ae3aa1da795e50b6904121fc77dff"
},
{
"file": "packages/general-ledger/bootstrap.php",
"sha256": "61d0b77bcac3459f059cd1a3ae1a55cbc4d12c7cb31144b4081c39e8b419adc8"
},
{
"file": "packages/general-ledger/README.md",
"sha256": "c4d18ffb16de5e22ad83e528a9fb991bf8ee7de100149e086b3c13b6e3c3b22e"
},
{
"file": "packages/general-ledger/src/LedgerSchema.php",
"sha256": "1fb2490fe8d4d206d2f8157803307cdd4e2f733150d0fec4993a7e229fce58cb"
},
{
"file": "packages/general-ledger/src/CycleSchema.php",
"sha256": "25407f9ea4321ee3acb0c310b5d981b8fdaf89c5464d32878ecc57c29e60972d"
},
{
"file": "packages/general-ledger/src/CostSchema.php",
"sha256": "da0919e6aeab83a572d1171b1f641b62593f1a0157a51ec988ecbdacda0a9942"
},
{
"file": "packages/general-ledger/src/CostCorrectionSchema.php",
"sha256": "1c43f7a3812e2a8ea31d4a0c88e887ec7d4cef4e9dd70cbab14af38b7b3e6080"
},
{
"file": "packages/general-ledger/src/PayableJournal.php",
"sha256": "ac3e843fa54cbff12401fe03b6dcb0ddd39fb999f231fcd920ca1d7dd498626a"
},
{
"file": "packages/general-ledger/src/LedgerCycle.php",
"sha256": "4b129275a365ed482c89b4f3753402c956a17b2c9ea77f6ed6a9e643c680d116"
},
{
"file": "packages/general-ledger/src/LedgerReports.php",
"sha256": "f0f271114229eab097808aa4ee0d50b47805524dc87c7d7c8d7f248e91705344"
},
{
"file": "packages/general-ledger/ui/cycle.php",
"sha256": "a5f5fb6ce5e10d8db37ce10f29d6cb93d332e69010c69298cebc8eb2a869b771"
},
{
"file": "resources/views/accounting/general-ledger.blade.php",
"sha256": "fef5645143028eee9c17b232f2fedd1ed5d1faedacd173a81d7d5bd2ecc89968"
},
{
"file": "resources/views/accounting/cost-ledger.blade.php",
"sha256": "cf326bc06fc25ef99f3145cb960bd0de75aed8017db03339e0f0acb6c58c3b3d"
},
{
"file": "resources/views/accounting/cost-correction.blade.php",
"sha256": "22e45f78e95b706d2b872a5a11497272550954eaf8ae37a6e0062a9e74c557e4"
},
{
"file": "resources/views/accounting/cost-correction-demo-entry.blade.php",
"sha256": "e91948a22822bdd7177ce2fb3fe6652c7fb5124289cfc8889facf24c88a8352e"
},
{
"file": "routes/web.php",
"sha256": "8851966d45cd947f80deba9bb7854002d07ab759c0a3a216151c19ca117a1105"
},
{
"file": "scripts/payable-history-sgf-proof.php",
"sha256": "b783266cf8bdf7173bfc7976719d37a7ae6be358efc1c545d65082f07099ed97"
},
{
"file": "scripts/ledger-run.mjs",
"sha256": "f85bb2ddefdabbce22e98a35a41765ec20f78444527690d648e6f423f01ed821"
},
{
"file": "scripts/ledger-cost-proof.php",
"sha256": "2ce63e29dbc1fa67bbdd515e1cfe534fb620cf07a5446d8f535e0a9441116419"
},
{
"file": "scripts/ledger-cost-http-entry.php",
"sha256": "757844f4cee11ba8cc7b68c0e64c4db6fff6deb8b786db5917196c8d4fda629e"
},
{
"file": "scripts/ledger-cost-http-router.php",
"sha256": "1b659dd9fc57a9603a622d7556de8324a7e8291368a18e6fd6cb9ec0a3fe458a"
},
{
"file": "scripts/ledger-cost-demo.mjs",
"sha256": "59e86f3d067c8002c5ddd9729fbb8c02bfb2bdcc3bef39b5caf1df19fd7c1afc"
},
{
"file": "scripts/ledger-cost-correction-cases.php",
"sha256": "78aef54f74e5fa222ed619c452235937888c3c5912298ca00a20c81972fb635f"
},
{
"file": "scripts/ledger-cost-correction-coexistence.php",
"sha256": "9e42a010ba5050e0c06e82c0d516e932f35f79e56710a86474a53b8cdd5ac6ef"
},
{
"file": "scripts/ledger-cost-correction-demo-check.mjs",
"sha256": "9413c2906b4a7dfee51de607e2b087455b3fa98415fa6a150b94d606f10b832c"
},
{
"file": "scripts/ledger-cost-correction-http.mjs",
"sha256": "4a73c046a7b24f916d3e127cd7ee371e9b030b5d6d590867fec878007dcb7d0c"
},
{
"file": "scripts/ledger-cost-correction-proof.php",
"sha256": "ae44772b2e7221b8dce332bd7dc226d74cf95b0c97fcb10e05242279ad6c7e22"
},
{
"file": "scripts/ledger-cost-correction-race.php",
"sha256": "73e0767b16bb2da23d9333e544e9e7c6b8d31fc4b538238a7e3647237a3c2626"
},
{
"file": "scripts/ledger-cost-correction-security.php",
"sha256": "3fed38fe6ae8d721476f90cb235df8afbb9f4ed482fd8f8a9961da268600067e"
},
{
"file": "scripts/archive-ledger-cost-correction-scope.mjs",
"sha256": "41db1ba54f9040aa3036dae232aa09deba9774707eaac93d38a7fc70a9b2f300"
},
{
"file": "scripts/summarize-ledger-cost-correction.mjs",
"sha256": "1045a03e0eaaf5b97a43e87c46a518f60a79c5cb23723b7d07522600d6cb54cc"
},
{
"file": "docs/GENERAL_LEDGER_DIRECT_COST_CORRECTION_SCOPE.md",
"sha256": "6a9dc267c063aaca738cd5cf2e82dbb017b1e21994c2e8447b3fbe3a18f553fe"
},
{
"file": "docs/GENERAL_LEDGER_DIRECT_COST_CORRECTION_DELIVERY.md",
"sha256": "8b27281b95c5c030c2c41088469dc763b22545163c440daaaee5a8c291f986d2"
},
{
"file": "README.md",
"sha256": "18861d53936846731aba0ecc97b388fe0c99a9a14711be4899043e98f173d0a4"
},
{
"file": "docs/PRODUCT_DEMO.md",
"sha256": "91180f5bd37ee568c94b7776ac323a01503afe583370adf7ca17be868289ef99"
},
{
"file": "docs/SGF_MODULE_FLOW_PREPARATION.md",
"sha256": "8965dabf3c8f691002233d71006aa679ae704a23364b14e233d7b540dd92947f"
}
],
"quality": {
"syntax": {
"php_files": 26,
"javascript_files": 6
},
"git_diff_check_both": true,
"sgf_phpstan_pint": "not_installed_not_run",
"native_application_code_unchanged_prior_static_quality_not_repeated": true,
"new_dependencies": false
},
"result": {
"original_minor": 27500,
"replacement_minor": 29500,
"delta_minor": 2000,
"journals": 3,
"lines": 6,
"gross_each_side_minor": 84500,
"current_cost_minor": 29500,
"atomic_group": true,
"isolated_parts_public_and_sql_refused": true,
"same_and_other_key_single_result": true
},
"rights": {
"distinct_ledger_rights": 10,
"ledger_grants_per_standard_new_fixture": 12,
"existing_correction_rights_only": true,
"real_or_public_grants": 0
},
"team_demo": {
"tag": "f3e0a05eb2ad",
"pid": 11120,
"url": "http://127.0.0.1:8055/qa/cost-demo",
"cookie": "sgf_cost_f3e0a05eb2ad",
"loopback_only": true,
"separate_team_database": true,
"old_demos_not_reset": true
},
"preservation": {
"old8054_source_outbox_rights_exact": true,
"old8054_correction_flag_off_and_schema_absent": true,
"six_pending_records_untouched": true,
"blocked_cache_not_cleared": true,
"existing_demos_not_reset": true,
"original_journal_calculations_decisions_outbox_preserved": true,
"previous_valid_proofs_preserved": true,
"unrelated_work_preserved": true,
"destination_unchanged": true
},
"limits": {
"visual_review_pending": true,
"actual_browser": false,
"deployment_capacity_validated": false,
"new_large_volume_benchmarks": false,
"new_indexes": false,
"all_six_modules_operational_composition": false,
"additional_implicit_revaluation_chains": false,
"closed_period_correction_or_reopening": false,
"stock_valuation_or_posting": false,
"payroll_or_industrial_cost_posting": false,
"real_tax_chart_or_financial_operations": false,
"destination_migrations_or_grants": false,
"publishing": false,
"purchasing_activation": false,
"checkpoint": false,
"acceptance_presumed": false
}
}
@@ -0,0 +1,740 @@
{
"increment": "COMMON-LEDGER-INDUSTRIAL-SIM-v1",
"consolidated_at_utc": "2026-11-03T05:54:08.190Z",
"authorization": {
"answer": "Autorizar o ciclo industrial sintético proposto",
"approved_scope_archive_sha256": "6044a9471b741db010f6d0509aacb56609624b05e83489311f8f5340cced108d",
"matches_presented_proposal": true
},
"functional_code": true,
"synthetic_only": true,
"status": "implemented_and_tested_with_limits",
"targeted_checks": 162,
"rendered_form_vm_checks": 9,
"concurrency_workers": 6,
"tests": {
"actual_owner_fixture": {
"passed": true,
"scope": {
"tenant_id": 1,
"company_id": 1,
"unit_id": 1
},
"lot_id": 1,
"result_id": 1,
"refs": {
"material": {
"id": 1,
"version": 1
},
"labour": {
"id": 2,
"version": 1
},
"pool": {
"id": 3,
"version": 1
},
"machine": {
"id": 4,
"version": 1
},
"production": {
"id": 5,
"version": 1
},
"material_rate": {
"id": 6,
"version": 1
},
"labour_rate": {
"id": 7,
"version": 1
},
"criterion": {
"id": 8,
"version": 1
}
},
"accounts": {
"QA-CUSTO-INDUSTRIAL": 9,
"QA-COMPENSACAO-INDUSTRIAL": 10
},
"principal_minor": 180000,
"residual_exact": "300",
"good_units": "10",
"unit_cost_exact": "180",
"initial_industrial_journals": 0,
"actual_owner_workflow": true
},
"actual_industrial_workflow": {
"passed": true,
"journal_id": 2,
"journals": 1,
"lines": 2,
"events": 3,
"principal_minor": 180000,
"cost_per_unit": "180",
"good_units": "10",
"residual_exact": "300",
"residual_not_posted": true,
"source_outbox_rights_unchanged": true,
"same_and_other_key_single_effect": true,
"typed_filter_and_reports": true
},
"regression": {
"passed": true,
"checks": 31,
"cases": [
{
"name": "exact-owner-impact-and-no-automatic-residual",
"checks": 4,
"passed": true
},
{
"name": "incomplete-result-and-current-dependencies",
"checks": 2,
"passed": true
},
{
"name": "same-amount-new-version-stales-capture",
"checks": 3,
"passed": true
},
{
"name": "live-permissions-person-and-config",
"checks": 5,
"passed": true
},
{
"name": "eligible-foreign-tenant-company-unit",
"checks": 3,
"passed": true
},
{
"name": "atomic-faults-recovery-and-no-second-recognition",
"checks": 7,
"passed": true
},
{
"name": "direct-origin-overlap-and-perimeter-immutability",
"checks": 2,
"passed": true
},
{
"name": "bounded-industrial-cards-and-hidden-panel",
"checks": 4,
"passed": true
}
],
"rollback_only": true,
"source_outbox_rights_unchanged": true
},
"extra_boundaries": {
"passed": true,
"checks": 10,
"cases": [
{
"name": "unapproved-result-and-non-cent-total",
"checks": 3,
"passed": true
},
{
"name": "production-not-completed-and-criterion-pending",
"checks": 2,
"passed": true
},
{
"name": "canonical-source-cannot-be-used-by-second-lot",
"checks": 1,
"passed": true
},
{
"name": "changed-posted-result-needs-future-correction",
"checks": 2,
"passed": true
},
{
"name": "whole-lot-period-must-fit",
"checks": 1,
"passed": true
}
],
"rollback_only": true,
"source_outbox_rights_unchanged": true
},
"actual_http": {
"passed": true,
"checks": 43,
"actual_http": true,
"actual_csrf": true,
"principal_minor": 180000,
"residual_exact": "300",
"industrial_journals": 1,
"industrial_lines": 2,
"industrial_events": 3,
"read_only_repeatable_read": true,
"writer_locks": 0,
"typed_reports_and_links": true,
"visual_review": false
},
"industrial_rendered_form": {
"passed": true,
"checks": 5,
"rendered_javascript": true,
"node_vm_only": true,
"no_business_commands": true,
"actual_browser": false
},
"joint_workflow": {
"passed": true,
"checks": 18,
"invoice_id": 1,
"obligation_id": 1,
"receipts": [
2,
3
],
"allocations": [
3,
5
],
"reversal_effect_id": 6,
"invoice_journal_id": 8,
"journals": 9,
"lines": 19,
"gross_debit_minor": 510500,
"gross_credit_minor": 510500,
"client_balance_minor": 40000,
"financial_balance_minor": 40000,
"period_closed": true,
"origin_unchanged": true,
"combined_checks": 33,
"source_outbox_rights_preserved": true,
"supplier_balance_minor": 6000,
"cost_balance_minor": 29500,
"typed_source_filters_separate": true,
"joint_period_closed": true
},
"joint_final": {
"passed": true,
"journals": 9,
"lines": 19,
"gross_debit_minor": 510500,
"gross_credit_minor": 510500,
"closures": 1,
"current_industrial_source_matches_posted_evidence": true,
"residual_exact": "300",
"residual_not_posted": true,
"closed_industrial_ui_without_commands": true,
"all_industrial_outbox_still_captured": true,
"panel_links_posted_industrial_journal": true
},
"concurrency": {
"passed": true,
"workers": 6,
"stale": {
"waiting": {
"a": {
"chain_reaches_parent": true,
"wait_event": "transactionid"
}
},
"read_before_release": {
"status": 200,
"amount_minor": 180000,
"journals": 0
},
"results": {
"a": {
"status": 409,
"message": "Resultado industrial actual completo e validado distintamente obrigatório."
}
},
"changed_effect_id": 9
},
"posting": {
"waiting": {
"b": {
"chain_reaches_parent": true,
"wait_event": "transactionid"
},
"a": {
"chain_reaches_parent": true,
"wait_event": "tuple"
}
},
"read_before_release": null,
"results": {
"a": {
"status": 200,
"result": {
"state": "posted",
"proposal_id": 3,
"journal_id": 2,
"replayed": false
}
},
"b": {
"status": 200,
"result": {
"state": "posted",
"proposal_id": 3,
"journal_id": 2,
"replayed": false
}
}
},
"changed_effect_id": null
},
"joint_closing": {
"waiting": {
"b": {
"chain_reaches_parent": true,
"wait_event": "transactionid"
},
"a": {
"chain_reaches_parent": true,
"wait_event": "tuple"
}
},
"read_before_release": null,
"results": {
"a": {
"status": 200,
"result": {
"state": "closed",
"closure_id": 1,
"period_version": 2,
"replayed": false
}
},
"b": {
"status": 200,
"result": {
"state": "closed",
"closure_id": 1,
"period_version": 2,
"replayed": false
}
}
},
"changed_effect_id": null
},
"journals": 9,
"lines": 19,
"gross_minor": 510500,
"closures": 1,
"original_result_and_outbox_preserved": true,
"residual_exact": "300",
"reader_finished_before_release": true
},
"concurrency_final": {
"passed": true,
"journals": 9,
"lines": 19,
"gross_debit_minor": 510500,
"gross_credit_minor": 510500,
"closures": 1,
"current_industrial_source_matches_posted_evidence": true,
"residual_exact": "300",
"residual_not_posted": true,
"closed_industrial_ui_without_commands": true,
"all_industrial_outbox_still_captured": true,
"panel_links_posted_industrial_journal": true
},
"team_readiness": {
"passed": true,
"checks": 40,
"roles": 3,
"no_business_commands": true,
"forms_mock_checks": 4,
"actual_browser": false,
"visual_review": false,
"initial_journals": 1,
"initial_groups": 0,
"initial_customer_openings": 0,
"initial_closures": 0
},
"team_preservation": {
"passed": true,
"sources_outbox_rights_unchanged": true,
"initial_industrial_journals": 0,
"initial_closures": 0,
"no_reset": true
},
"old8057_preservation": {
"passed": true,
"old8057_industrial_flag_off": true,
"new_schema_absent": true,
"existing_three_panels_unchanged": true,
"two_provider_packet_hash_unchanged": true,
"observed_gross_minor": 27500,
"source_outbox_rights_unchanged": true,
"read_only": true
}
},
"private_evidence": [
{
"file": "private/ledger-9784b53db6ec/industrial-fixture.json",
"sha256": "90dcfa147b52ac19a12653bc2cb375c9fe3f2a432339d54f1795f4a6d207b601"
},
{
"file": "private/ledger-9784b53db6ec/industrial-workflow.json",
"sha256": "1fbe6bc0d1b0d3882ab8f4a5b005ad682c32cf990d0277378b8405a63c5fe2aa"
},
{
"file": "private/ledger-1aa5762a0c16/industrial-cases.json",
"sha256": "085cca2cbc57d5302e499aa67bd6d69cb948ca3878b3456b875cc8bf280f1b3a"
},
{
"file": "private/ledger-1aa5762a0c16/industrial-extra-cases.json",
"sha256": "27aab4c701f11bd20378f2a87e3a37b4dbaaff387eb926cbcc9beee9f5c0f3cc"
},
{
"file": "private/ledger-1aa5762a0c16/industrial-http.json",
"sha256": "f37d0868d94d56b5074584d4a00a770a858d383faf0e984cc71c78374c7b819b"
},
{
"file": "private/ledger-1aa5762a0c16/industrial-form-check.json",
"sha256": "c99308acb405ff5d94576018e0ee82fee2485fb68a1d1e62da0d94578be1ba48"
},
{
"file": "private/ledger-1aa5762a0c16/composition-workflow.json",
"sha256": "cfc6e70d148f8721b1fa4e55d4d48df330c46c55edc53627c789bb4abbee1ff3"
},
{
"file": "private/ledger-1aa5762a0c16/industrial-final.json",
"sha256": "8940edb3eedc6f70c54aa438556393423793af4b9f61224690e68f5663ba30ae"
},
{
"file": "private/ledger-e3009c989fb2/industrial-race.json",
"sha256": "7666eb40b6c387871dfced43064df668beec6ae1854d2b8f041c864f80ac41a0"
},
{
"file": "private/ledger-e3009c989fb2/industrial-final.json",
"sha256": "8940edb3eedc6f70c54aa438556393423793af4b9f61224690e68f5663ba30ae"
},
{
"file": "private/ledger-072ef8124ab4/industrial-demo-http.json",
"sha256": "29b989bf0747cb53560205cbb15055ce6cc682fae333dd4eb4be46b5cd6cd1a7"
},
{
"file": "private/ledger-072ef8124ab4/industrial-demo-preservation.json",
"sha256": "12c0c4d5a95617b87ebd03dcf3ce931d1421a638b5d889c575af5d1bbbbb18cb"
},
{
"file": "private/ledger-fe42e1169ce6/composition-industrial-compatibility.json",
"sha256": "5901b4685318d6416e6b00b192f860be277b4f0bbedd89b4ffa366f8ea258e35"
},
{
"file": "private/ledger-industrial-approved-scope.md",
"sha256": "6044a9471b741db010f6d0509aacb56609624b05e83489311f8f5340cced108d"
}
],
"reused_manifests": [
{
"file": "docs/proofs/common-ledger-composition-20261103.json",
"sha256": "d64957d14dd6140b66fbb8569997ed941dab954046b56c38939202a2e63653a0",
"private_artifacts_reused": true
},
{
"file": "docs/proofs/common-ledger-direct-cost-correction-20261103.json",
"sha256": "2111a30006d24f4325c6f4292e9ffb567adf28950ffbfa76fbb9e8143a2fedb7",
"private_artifacts_reused": true
},
{
"file": "docs/proofs/common-ledger-direct-cost-20261103.json",
"sha256": "5354ac34eb27dd9c05564d8eb9694a90c3e8eceaf018e2873aa299aa54b6cf6e",
"private_artifacts_reused": true
},
{
"file": "docs/proofs/common-ledger-sales-receivable-20261103.json",
"sha256": "b5572466111fb85d89a604fbaa423976ed17c61afc5e2e45ba392fb23aa82e8c",
"private_artifacts_reused": true
},
{
"file": "docs/proofs/common-ledger-reports-20261103.json",
"sha256": "83b81a3401e4cfe8ea4c9d13339385f9241d0eefee5495da3e767812f0c863f1",
"private_artifacts_reused": true
},
{
"file": "docs/proofs/common-ledger-complete-cycle-20261102.json",
"sha256": "23657d594b84e6aeeb0d16d45790d54feca04b12e2260cfffa4f8e4a37eaa0ce",
"private_artifacts_reused": true
},
{
"file": "docs/proofs/common-finance-bundle-20261103.json",
"sha256": "086c1556e7cefcf64a7064995a4aa6bd0e3aa9dd62cba66285b7801715f9f22c",
"private_artifacts_reused": true
}
],
"previous_private_artifacts_verified": 89,
"frozen_bundles": [
{
"files": 25,
"manifest_sha256": "6a507ea7d708a12a8e526e4c610696d8db84079d18aede470237b65505630e7e",
"all_bytes_preserved": true
},
{
"files": 30,
"manifest_sha256": "cbc4ddbea15f5e396c92bc2e664b973138551928980f334bcf3eb0cf097cacb1",
"all_bytes_preserved": true
}
],
"quality": {
"syntax": {
"php": 26,
"js": 7
},
"diff_check_both_repositories": true,
"unrelated_business_suites_not_repeated": true
},
"source_files": [
{
"file": "AGENTS.md",
"sha256": "7585c74ee1d3a1631cfe55d7aebf87b7e8aebda5721efd4085e8d26febc3666a"
},
{
"file": "config/industrial_ledger.php",
"sha256": "29613a0128f8b22db2f30fb7b498ea0ad5cae24633768552aca90e8ba589b976"
},
{
"file": "app/Modules/Industry/IndustrialCosts.php",
"sha256": "55ad20b756d94d3d734886f8a6aae157a32916735f8af9fb6a3a5c69859beb45"
},
{
"file": "app/Modules/Accounting/IndustrialLedgerSource.php",
"sha256": "7e72f7ed48dede5e8b719e906dc0ea104e1b19846f4b288632f65e4980c4662d"
},
{
"file": "app/Modules/Accounting/IndustrialLedgerController.php",
"sha256": "ff3645bfb89e78211f4eead60eb65de32ea5f128136b652e4a24fcdf38529972"
},
{
"file": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "39cceb9ec129dc36ae272e5da07538a6e2d7be9bd536e48d4eed3c13a22045ad"
},
{
"file": "app/Modules/Accounting/GeneralLedgerController.php",
"sha256": "25db29ca326a0e5d6f5ae74d0e127e55fdfb60abf152b82243c7eec83292e246"
},
{
"file": "app/Modules/Accounting/CostLedgerSource.php",
"sha256": "4514a392e4900219826da3ffd62f26236a1dfcb5708f0d5f1ff3ab91cbbc6bc8"
},
{
"file": "app/Modules/Accounting/LedgerComposition.php",
"sha256": "0b9f8edafef7c7417b5a3f76ae68ecb693f6884934aa8ade43a0051967c3b1a9"
},
{
"file": "app/Modules/Accounting/LedgerCompositionController.php",
"sha256": "a84834c4471075642a642ad4bed669ba0a439c1a771e17db026113813c61debd"
},
{
"file": "app/Shared/Testing/TestingDatabaseGuard.php",
"sha256": "475cd00bc67bf4e6ed9928170b1c19ff9be8d56b6ab56af783a654a789d7f9fb"
},
{
"file": "packages/general-ledger/bootstrap.php",
"sha256": "4f1353a70e3fe3345cf6816e5d729c5c2d06a07546c958258c75deee0e6d9687"
},
{
"file": "packages/general-ledger/README.md",
"sha256": "78ce127a398fc05d796b41b0c6de3c4748be3fd8c51f0c7539ffed60f6803a1a"
},
{
"file": "packages/general-ledger/src/IndustrialSchema.php",
"sha256": "7ba834cea96e91c5a3d063fe99d4805a823a86e6cac371b3e12b6e46de39873a"
},
{
"file": "packages/general-ledger/src/PayableJournal.php",
"sha256": "c7bd6de3ad850dbfe655c06a3f1f2d27507460260b7faa658fce4231756e9ffc"
},
{
"file": "packages/general-ledger/src/LedgerCycle.php",
"sha256": "615e993a66794ab54012c4f6b02106ce1309d31d4066437714275f064d0a68a3"
},
{
"file": "packages/general-ledger/src/LedgerReports.php",
"sha256": "13ba42d65494bdd65c3e534de6483b691f79231771cf6234748d400caa550968"
},
{
"file": "packages/general-ledger/ui/reports.php",
"sha256": "519ea65b609c3b716dc08e50b2048518963b7991f625e61d190228a90c98ee88"
},
{
"file": "resources/views/accounting/industrial-ledger.blade.php",
"sha256": "d705d844582005cce3c777057075b38f8f97885b898463162163cd0d5300f90a"
},
{
"file": "resources/views/accounting/industrial-ledger-demo-entry.blade.php",
"sha256": "07475b98c5017e87c09ebd05f02415463e7c8980248aaa997345ab519e89800c"
},
{
"file": "resources/views/accounting/general-ledger.blade.php",
"sha256": "758de16171114eff0b1bf5197d5db11d62e99af49ae8198f61efa5233c10fd09"
},
{
"file": "resources/views/accounting/ledger-composition.blade.php",
"sha256": "7cd8ac7cfab684fc73e35752d3b157a3020365628262a7918d40ebce1ea365a0"
},
{
"file": "routes/web.php",
"sha256": "426d7356c4d62278a637495fa8e908f64ad24131e347d0339e95d133f66ead7d"
},
{
"file": "scripts/payable-history-sgf-proof.php",
"sha256": "16f564772fe5c0860734fcbf6368d915f2bb9af2bd9f2764f836325d426ccbe3"
},
{
"file": "scripts/ledger-cost-proof.php",
"sha256": "73950d99939e5edf38556df73912d3807dc4ae3c2e9f7bab82d7464c6552bdbf"
},
{
"file": "scripts/ledger-cost-http-entry.php",
"sha256": "c89ee42790efacb0220fe4e7e30c46e43fd731b0d2f249aa06bca7b8a99c2bf1"
},
{
"file": "scripts/ledger-cost-demo.mjs",
"sha256": "59e86f3d067c8002c5ddd9729fbb8c02bfb2bdcc3bef39b5caf1df19fd7c1afc"
},
{
"file": "scripts/ledger-run.mjs",
"sha256": "30897a856e1804051e65cfd145f3ff15e027123c4d8ac8713da85e0bc2944f1c"
},
{
"file": "scripts/ledger-composition-proof.php",
"sha256": "dd32c47b8be2c45cc484704e25d105ef6467f81dda1882e085f42d99bea296da"
},
{
"file": "scripts/ledger-composition-workflow.php",
"sha256": "2c376a5c4576ef67ca5d0bad1e1754e7c95211d6d75ee4d551f93a299e819825"
},
{
"file": "scripts/ledger-industrial-cases.php",
"sha256": "b99f31a6c26093188fe71741f808a2b8151f578906ef77b9656fae4a0b8bb4db"
},
{
"file": "scripts/ledger-industrial-demo-check.mjs",
"sha256": "c979354087d2349bae08d43ecfadc590ee4bb98217811198507a69fdda971424"
},
{
"file": "scripts/ledger-industrial-extra-cases.php",
"sha256": "67706870888077f6d0cbe9e8fb10cf696e90bb17309480d5e626ce9fba708778"
},
{
"file": "scripts/ledger-industrial-form-check.mjs",
"sha256": "fab3e40dad965bbc7206f4f3c05a4aaca75b3ef417d224ec4d0ef255012942e7"
},
{
"file": "scripts/ledger-industrial-http.mjs",
"sha256": "1811c65444c111f9e6556b80acb249115ee2857e2c2151803e88f1e33b9d4763"
},
{
"file": "scripts/ledger-industrial-proof.php",
"sha256": "5dcbfb55957a0eb7288e93037b19466a60d755b04ccafa7950c41029dad4f366"
},
{
"file": "scripts/ledger-industrial-race.php",
"sha256": "255311ae488da28ec2f7cca4429e34739adb2aa4100af46c51df60a7f61a63d1"
},
{
"file": "scripts/summarize-ledger-industrial.mjs",
"sha256": "1f29b5e5ffdd1f24f566b2f5b941c339626815117c75f9a16bb888feadd2a1a0"
},
{
"file": "scripts/inspect-module-flow-plan.mjs",
"sha256": "f1b52208694e90dd6d5ed83792e97ee6f8772dddea8baefd29158b92b1f2bb59"
},
{
"file": "docs/integration/sgf-flow-plan.json",
"sha256": "49c5c87cc1f7cbf63dadabdc81d92a8a04a98615d0c86d2acb6d097923c4c615"
},
{
"file": "docs/GENERAL_LEDGER_INDUSTRIAL_SCOPE.md",
"sha256": "1f32ff86851f04181111d3ec0deaaa51f7582873bfcb469c9a055f3c04eefb4e"
},
{
"file": "docs/GENERAL_LEDGER_INDUSTRIAL_DELIVERY.md",
"sha256": "a8655379552022c561f25b519e1ba30841afac350aa66b585c237d36b78aa2be"
},
{
"file": "docs/GENERAL_LEDGER_COMPOSITION_DELIVERY.md",
"sha256": "07c6d002bc2ae1eb6d0926ee4d0b35cb6f0e5d2a65b8e6256aa5ca3b72caf11a"
},
{
"file": "README.md",
"sha256": "1d0ed8cc7fd6fbdfd96af17da450151343e8eb0b020751b80bc9d5c0f4327938"
},
{
"file": "docs/PRODUCT_DEMO.md",
"sha256": "2d8d14a2b709869ed04a75f4201f7eee3ef7fe2f177ca340f71ff806ba7907a6"
},
{
"file": "docs/SGF_MODULE_FLOW_PREPARATION.md",
"sha256": "ec95aa485e47c8c4efd0e492128c8b0c969908f76cf491597876a39c330e3a46"
}
],
"static_flow_inventory": {
"file": "docs/proofs/module-flow-industrial-update-20261103.json",
"sha256": "4d660a11058dda4db8c841cdfd05d3993eb550ef7e3d2b6d33c550d4bc47fbfa",
"modules": 6,
"stages": 13,
"sources": 32,
"mandatory_cycles": 0,
"database_connections": 0,
"operational_validation": false
},
"team_demo": {
"tag": "072ef8124ab4",
"pid": 25536,
"url": "http://127.0.0.1:8058/qa/cost-demo",
"cookie": "sgf_cost_072ef8124ab4",
"loopback_only": true,
"separate_team_database": true,
"old_demos_not_reset": true
},
"observed_result": {
"industrial_journals": 1,
"industrial_lines": 2,
"industrial_minor": 180000,
"units": "10",
"unit_cost_exact": "180",
"unposted_residual_exact": "300",
"joint_journals": 9,
"joint_lines": 19,
"joint_debit_minor": 510500,
"joint_credit_minor": 510500,
"client_balance_minor": 40000,
"direct_cost_balance_minor": 29500,
"supplier_balance_minor": 6000,
"joint_closures": 1
},
"preservation": {
"old8057_source_outbox_rights_match_original_baseline": true,
"old_composition_provider_packet_unchanged": true,
"six_pending_records_untouched": true,
"blocked_cache_untouched": true,
"old_demos_not_reset": true,
"destination_unchanged": true,
"private_credentials_not_versioned": true,
"unrelated_work_preserved": true
},
"limits": {
"visual_review_pending": true,
"actual_browser": false,
"large_volume_measurements": false,
"deployment_capacity_validated": false,
"all_six_modules_operationally_complete": false,
"industrial_correction": false,
"period_reopening": false,
"stock_valuation_or_payroll": false,
"real_financial_operations": false,
"destination_migrations_or_grants": false,
"purchasing_activation": false,
"publication": false,
"checkpoint": false,
"acceptance_presumed": false
}
}
@@ -0,0 +1,710 @@
{
"increment": "COMMON-LEDGER-INDUSTRIAL-CORRECTION-SIM-v1",
"consolidated_at_utc": "2026-11-03T06:46:32.380Z",
"authorization": {
"answer": "Autorizar a correcção industrial sintética proposta",
"approved_scope_archive_sha256": "7d41a413c1d1e5b8436b72edb0600852841dfd29ae2ba995b2a691bd7562cd1a",
"matches_presented_proposal": true
},
"functional_code": true,
"synthetic_only": true,
"status": "implemented_and_tested_with_limits",
"targeted_checks": 155,
"form_vm_checks": 5,
"concurrency_workers": 6,
"tests": {
"actual_owner_setup": {
"passed": true,
"original_journal_id": 2,
"original_journal_sha256": "0189bb33a87d912ae3f83e21a393cf53e96e4b448ea5747fdfc627533b024144",
"original_result_sha256": "70ccb629f4c3b025394e9cc2e101182f614087f3430e3e767aec6ee1cac1b7cb",
"replacement_rate_id": 9,
"replacement_result_id": 2,
"replacement_refs": {
"material": {
"id": 1,
"version": 1
},
"labour": {
"id": 2,
"version": 1
},
"pool": {
"id": 3,
"version": 1
},
"machine": {
"id": 4,
"version": 1
},
"production": {
"id": 5,
"version": 1
},
"material_rate": {
"id": 9,
"version": 2
},
"labour_rate": {
"id": 7,
"version": 1
},
"criterion": {
"id": 8,
"version": 1
}
},
"original_minor": 180000,
"replacement_minor": 182000,
"residual_exact": "300",
"source_fingerprint": "f62ebfc903c20b2bb55357b4f83edae1db4a481c762930d0b4f044f60869527b",
"initial_industrial_correction_groups": 0
},
"actual_industrial_pair": {
"passed": true,
"industrial_journals": 3,
"industrial_lines": 6,
"industrial_events": 9,
"gross_minor": 542000,
"industrial_balance_minor": 182000,
"source_original_outbox_rights_exact": true,
"same_and_other_key_no_duplicate": true
},
"regression": {
"passed": true,
"cases": [
{
"name": "explicit-asymmetric-impact-and-indivisible-application",
"checks": 7,
"passed": true
},
{
"name": "faults-at-pair-boundaries-rollback-and-recovery",
"checks": 7,
"passed": true
},
{
"name": "database-rejects-orphan-cost-reversal",
"checks": 1,
"passed": true
},
{
"name": "changed-source-version-requires-new-conference",
"checks": 4,
"passed": true
},
{
"name": "rights-person-and-replay-authority",
"checks": 2,
"passed": true
},
{
"name": "readers-foreign-original-disabled-capability-and-closed-period",
"checks": 5,
"passed": true
},
{
"name": "new-change-after-correction-blocks-owner-conference-no-chain",
"checks": 4,
"passed": true
}
],
"checks": 31,
"rollback_only": true,
"source_originals_outbox_rights_unchanged": true,
"asymmetric_pair_and_orphan_sql_enforced": true
},
"security": {
"passed": true,
"checks": 7,
"eligible_foreign_tenant_company_unit_refused": true,
"rollback_only": true,
"source_outbox_rights_unchanged": true,
"capture_rights_revalidated": [
"industrial_costs.view",
"general_ledger.view",
"general_ledger.correct_prepare"
],
"post_right_revocation_covered_in_main_regression": true
},
"fully_eligible_foreign_contexts": {
"passed": true,
"checks": 4,
"foreign_tenant_company_unit_fully_eligible": true,
"foreign_accounting_person_and_rights_present": true,
"original_journal_refused_by_scope": true,
"rollback_only": true,
"source_outbox_rights_exact": true
},
"actual_http": {
"passed": true,
"checks": 51,
"actual_http": true,
"csrf_and_context": true,
"indivisible_four_line_impact": true,
"isolated_public_parts_refused": true,
"original_minor": 180000,
"replacement_minor": 182000,
"delta_minor": 2000,
"journals": 3,
"lines": 6,
"applied_groups": 1,
"industrial_gross_minor": 542000,
"company_gross_minor": 569500,
"balance_minor": 182000,
"source_snapshot_unchanged": true,
"joint_close_requires_other_sources": true,
"read_only_workspace": true,
"writer_locks": 0,
"visual_review": false
},
"three_pair_domains": {
"passed": true,
"checks": 6,
"three_pair_domains_sql_validated": true,
"same_numeric_source_ids_separate": true,
"rollback_only": true,
"source_outbox_rights_unchanged": true
},
"joint_workflow": {
"passed": true,
"checks": 18,
"invoice_id": 1,
"obligation_id": 1,
"receipts": [
2,
3
],
"allocations": [
3,
5
],
"reversal_effect_id": 6,
"invoice_journal_id": 10,
"journals": 11,
"lines": 23,
"gross_debit_minor": 872500,
"gross_credit_minor": 872500,
"client_balance_minor": 40000,
"financial_balance_minor": 40000,
"period_closed": true,
"origin_unchanged": true,
"combined_checks": 33,
"source_outbox_rights_preserved": true,
"supplier_balance_minor": 6000,
"cost_balance_minor": 29500,
"typed_source_filters_separate": true,
"joint_period_closed": true
},
"joint_final": {
"passed": true,
"journals": 11,
"lines": 23,
"gross_minor": 872500,
"industrial_closing_minor": 182000,
"residual_exact": "300",
"joint_closures": 1,
"typed_industrial_groups": 1,
"closed_ui_no_commands": true,
"current_source_resolved": true
},
"concurrency": {
"passed": true,
"workers": 6,
"stale_group": {
"waiting": {
"a": {
"chain_reaches_parent": true,
"wait_event": "transactionid"
}
},
"read_before_release": {
"status": 200,
"amount_minor": 182000,
"journals": 1,
"results": 0
},
"results": {
"a": {
"status": 409,
"message": "Fonte, regra ou período mudaram; prepare nova conferência."
}
},
"changed_effect_id": 3
},
"fresh_pair": {
"waiting": {
"b": {
"chain_reaches_parent": true,
"wait_event": "transactionid"
},
"a": {
"chain_reaches_parent": true,
"wait_event": "tuple"
}
},
"read_before_release": null,
"results": {
"a": {
"status": 200,
"result": {
"state": "corrected",
"correction_id": 2,
"result_id": 1,
"reverse_journal_id": 3,
"replacement_journal_id": 4,
"replayed": false
}
},
"b": {
"status": 200,
"result": {
"state": "corrected",
"correction_id": 2,
"result_id": 1,
"reverse_journal_id": 3,
"replacement_journal_id": 4,
"replayed": false
}
}
},
"changed_effect_id": null
},
"joint_close": {
"waiting": {
"b": {
"chain_reaches_parent": true,
"wait_event": "transactionid"
},
"a": {
"chain_reaches_parent": true,
"wait_event": "tuple"
}
},
"read_before_release": null,
"results": {
"a": {
"status": 200,
"result": {
"state": "closed",
"closure_id": 1,
"period_version": 2,
"replayed": false
}
},
"b": {
"status": 200,
"result": {
"state": "closed",
"closure_id": 1,
"period_version": 2,
"replayed": false
}
}
},
"changed_effect_id": null
},
"reader_finished_before_release": true,
"industrial_groups_prepared": 2,
"industrial_groups_applied": 1,
"journals": 11,
"lines": 23,
"gross_minor": 872500,
"industrial_balance_minor": 182000,
"closures": 1,
"original_journal_both_results_and_original_outbox_exact": true,
"current_result_version": 3,
"residual_exact": "300"
},
"concurrency_final": {
"passed": true,
"journals": 11,
"lines": 23,
"gross_minor": 872500,
"industrial_closing_minor": 182000,
"residual_exact": "300",
"joint_closures": 1,
"typed_industrial_groups": 1,
"closed_ui_no_commands": true,
"current_source_resolved": true
},
"team_http_forms": {
"passed": true,
"checks": 23,
"three_accounting_roles": true,
"original_minor": 180000,
"actual_successor_minor": 182000,
"initial_groups": 0,
"initial_closures": 0,
"no_business_commands": true,
"rendered_forms_mock_checks": 5,
"actual_browser": false,
"visual_review": false,
"private_existing_build": true,
"initial_industrial_journals": 1,
"initial_company_journals": 2
},
"team_before": {
"passed": true,
"initial_journals": 2,
"initial_industrial_groups": 0,
"initial_closures": 0,
"source_original_outbox_rights_exact": true
},
"team_after": {
"passed": true,
"initial_journals": 2,
"initial_industrial_groups": 0,
"initial_closures": 0,
"source_original_outbox_rights_exact": true
},
"old8058_preservation": {
"passed": true,
"old8058_source_outbox_rights_exact": true,
"correction_default_off": true,
"correction_schema_absent": true,
"uncomposed_correction_refused403": true,
"three_provider_packet_unchanged": true,
"old_initial_journal_count": 1,
"read_only": true
}
},
"private_evidence": [
{
"file": "private/ledger-a3c69acf5a50/industrial-correction-fixture.json",
"sha256": "2495090d91cc2b43422d0f7ecb8f528a1e90baec89fc88b5574cc124b1c38f7f"
},
{
"file": "private/ledger-a3c69acf5a50/industrial-correction-workflow.json",
"sha256": "fa421b294d82eaea37e6008fd1e6f2a0a2ec8a61217dcfca2d39ce9d3ac100fb"
},
{
"file": "private/ledger-a3c69acf5a50/industrial-correction-cases.json",
"sha256": "15879e78004bd4c70f03eeee12cf8fbed7982f1dc5a22f15c2342cc959854ec2"
},
{
"file": "private/ledger-a3c69acf5a50/industrial-correction-security.json",
"sha256": "bbc6b18061c8cecf41c4547c9b5b3493364b596be7d5ed130669d3bbb934fcf9"
},
{
"file": "private/ledger-d55f5fc71dcb/industrial-correction-deep-scope.json",
"sha256": "193ed3f907bf7dceaf679ea21c2c066b172bf12f1590ee71ce72c29d6e997868"
},
{
"file": "private/ledger-d55f5fc71dcb/industrial-correction-http.json",
"sha256": "23c391e548c6c8148ceca929654de225cb94f2165977aa2c33fb442743ec36cd"
},
{
"file": "private/ledger-d55f5fc71dcb/industrial-correction-coexistence.json",
"sha256": "60cc3e27dbeff03e192fde41a87c9b8f74859d5a1fa06b759f0690680fab31b4"
},
{
"file": "private/ledger-d55f5fc71dcb/composition-workflow.json",
"sha256": "83c8b094d063fec8d28f7af2b5390413d343e4f15cf2b52f575a13af0109fdac"
},
{
"file": "private/ledger-d55f5fc71dcb/industrial-correction-final.json",
"sha256": "b819ccd09e66cf057d80030b4b75461548f1e20773e40fc2c12c6ee161dd2f13"
},
{
"file": "private/ledger-5b49607829f9/industrial-correction-race.json",
"sha256": "8bd5ab40773a772d7a8e8563b788fb1131088a2ea140c63811b09e561cff52e2"
},
{
"file": "private/ledger-5b49607829f9/industrial-correction-final.json",
"sha256": "b819ccd09e66cf057d80030b4b75461548f1e20773e40fc2c12c6ee161dd2f13"
},
{
"file": "private/ledger-61b694d72ae4/industrial-correction-demo-http.json",
"sha256": "2d0ca9279bd6dc7715173d544afaf405eda7477bfb1ca8e4fbac80a5918b3e6a"
},
{
"file": "private/ledger-61b694d72ae4/industrial-correction-demo-preservation.json",
"sha256": "3c531f7dbeb1363c13f5c7eaaf396806fe72462ab3cdd606706d6bd6c333bb6b"
},
{
"file": "private/ledger-61b694d72ae4/industrial-correction-demo-post.json",
"sha256": "3c531f7dbeb1363c13f5c7eaaf396806fe72462ab3cdd606706d6bd6c333bb6b"
},
{
"file": "private/ledger-072ef8124ab4/industrial-demo-after-correction.json",
"sha256": "e98b61f5d7eaf0cd684962b7a821717f8b72c6fafa8e1a60c6b667b2fccfe5bc"
},
{
"file": "private/ledger-industrial-correction-approved-scope.md",
"sha256": "7d41a413c1d1e5b8436b72edb0600852841dfd29ae2ba995b2a691bd7562cd1a"
}
],
"metadata_notes": [
"The inherited four_live_rights_revalidated label was replaced with the exact three capture rights in the public view; correct_post revocation is tested in the main regression. Original private evidence is unmodified.",
"Team initial_industrial_journals is1; the initial company book contains2 journals."
],
"previous_manifests": [
{
"file": "docs/proofs/sgf-payable-report-capture-20261103.json",
"sha256": "155c60a14406b3ae3a5df862806a2ea2d9144b67871aaff7e75f9713701d649c",
"private_artifacts_preserved": true
},
{
"file": "docs/proofs/common-ledger-industrial-20261103.json",
"sha256": "1f26b2c11d565a65456f3fb5f3b11c9e0ac0726649ccef1485464e46ba753e18",
"private_artifacts_preserved": true
},
{
"file": "docs/proofs/common-ledger-composition-20261103.json",
"sha256": "d64957d14dd6140b66fbb8569997ed941dab954046b56c38939202a2e63653a0",
"private_artifacts_preserved": true
},
{
"file": "docs/proofs/common-ledger-direct-cost-correction-20261103.json",
"sha256": "2111a30006d24f4325c6f4292e9ffb567adf28950ffbfa76fbb9e8143a2fedb7",
"private_artifacts_preserved": true
},
{
"file": "docs/proofs/common-ledger-direct-cost-20261103.json",
"sha256": "5354ac34eb27dd9c05564d8eb9694a90c3e8eceaf018e2873aa299aa54b6cf6e",
"private_artifacts_preserved": true
},
{
"file": "docs/proofs/common-ledger-sales-receivable-20261103.json",
"sha256": "b5572466111fb85d89a604fbaa423976ed17c61afc5e2e45ba392fb23aa82e8c",
"private_artifacts_preserved": true
},
{
"file": "docs/proofs/common-ledger-complete-cycle-20261102.json",
"sha256": "23657d594b84e6aeeb0d16d45790d54feca04b12e2260cfffa4f8e4a37eaa0ce",
"private_artifacts_preserved": true
}
],
"previous_private_artifacts_verified": 94,
"frozen_bundles": [
{
"files": 25,
"manifest_sha256": "6a507ea7d708a12a8e526e4c610696d8db84079d18aede470237b65505630e7e",
"all_bytes_preserved": true
},
{
"files": 30,
"manifest_sha256": "cbc4ddbea15f5e396c92bc2e664b973138551928980f334bcf3eb0cf097cacb1",
"all_bytes_preserved": true
}
],
"quality": {
"syntax": {
"php": 19,
"js": 4
},
"diff_check_both_repositories": true,
"unrelated_suites_not_repeated": true
},
"source_files": [
{
"file": "AGENTS.md",
"sha256": "196232e45098535f084fe1df62887f700a7ff5d3416536523b9e69b4bd133457"
},
{
"file": "config/industrial_ledger.php",
"sha256": "f6ccfe29a6bfce1fbf636de3ed1f245644547a3c196fe7a54e7e76c4693b40fa"
},
{
"file": "app/Modules/Accounting/IndustrialLedgerSource.php",
"sha256": "2479bfd33182fdd918b14748ca9e00e8c789a127bf1746651c8f8f7d53205024"
},
{
"file": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "92980788fff94f1b66b18dbb4fcefdc9185a86626ac97df8116eea4c4eeced7e"
},
{
"file": "packages/general-ledger/bootstrap.php",
"sha256": "f8f94212a0cbc926aa510459a1bbd3a022d149a7a0f185cf56644c2f5a2c6bb7"
},
{
"file": "packages/general-ledger/README.md",
"sha256": "1a016bbc92fef19263dc823eb4713b28d1126d4c9ebb820f33121776cf266229"
},
{
"file": "packages/general-ledger/src/IndustrialCorrectionSchema.php",
"sha256": "3d657773582fe5afc4948d60c60f5b70f79b274a619778df97d62ead6013186f"
},
{
"file": "packages/general-ledger/src/PayableJournal.php",
"sha256": "6a2fbb1fecebbaeeb6511557a116bf17e1a5daa2bd8ed389e777ec9ecd822c66"
},
{
"file": "packages/general-ledger/src/LedgerCycle.php",
"sha256": "5040369c2fc24ef713e758e5d4d1241fc52b8bef421ea7bf45855000f755d524"
},
{
"file": "packages/general-ledger/ui/cycle.php",
"sha256": "26eaee6a187e41aedac23d101e26fe8707937cd59fc70042a2332a2f13f3f1be"
},
{
"file": "resources/views/accounting/industrial-ledger.blade.php",
"sha256": "17568eb8e7391a0486ac8e45fda9716f817636d1832658b4969cdc6a123f058b"
},
{
"file": "resources/views/accounting/industrial-correction.blade.php",
"sha256": "5d2a3c72714f55c4378ec7ae4ccfb4738b3b7db32eb5bb882f5de47d2793eb65"
},
{
"file": "resources/views/accounting/industrial-correction-demo-entry.blade.php",
"sha256": "d6d0db6bce610fd8347db4eb629842e36879bc36448e3023497e71ba99188c09"
},
{
"file": "resources/views/accounting/general-ledger.blade.php",
"sha256": "ca0608bd9c9cce03a37674795848516ef546f76f38bd7b7e00932cba5f2f4e81"
},
{
"file": "resources/views/accounting/cost-ledger.blade.php",
"sha256": "9a5f58b97767e96eb8e998870cac5fded74c9ad5dfd812c6323b934f2aeb1ff4"
},
{
"file": "scripts/payable-history-sgf-proof.php",
"sha256": "05fb3240f513fa1b91249caf0ddeeb25304186b98cb3bdfe6e339e38126fb54e"
},
{
"file": "scripts/ledger-cost-proof.php",
"sha256": "c3df28409571229e8d63a1d7314d15eaf0ef7e70dd75b496b071b9028b8825a7"
},
{
"file": "scripts/ledger-industrial-proof.php",
"sha256": "fc3d380840a5896f50d391ddf9320bcdbb9334cda17bf0c094cf3a3ce80c61e7"
},
{
"file": "scripts/ledger-cost-http-entry.php",
"sha256": "9966c9b3a24075e6adaa65584874e62b03aed7a4cc1a3d3c57fadbd39ea81ea0"
},
{
"file": "scripts/ledger-composition-workflow.php",
"sha256": "fb37d6fb30f98e90441743195a45818f7837f5ca68e4f16be6650597675e802e"
},
{
"file": "scripts/ledger-run.mjs",
"sha256": "80fe57cd803ceaf774420dbb5064a28ea5e53c8b56ba79fbddef337dd89bd52a"
},
{
"file": "scripts/ledger-industrial-correction-cases.php",
"sha256": "08b429f70624bf46975871bc317d8765e7fba62ea30a772cec97e80086b88b81"
},
{
"file": "scripts/ledger-industrial-correction-coexistence.php",
"sha256": "6daf4625ce1fd496e65812be35a36211dd44409049950e131ee036a4df6b29b5"
},
{
"file": "scripts/ledger-industrial-correction-deep-scope.php",
"sha256": "de7c7d1efe508b4da7ad20d4fb1b26095813283538006d25c1b730aebca712d8"
},
{
"file": "scripts/ledger-industrial-correction-demo-check.mjs",
"sha256": "5cc0f396caf47b765b3d7c70a8fe862d3719f3b7487f6bccbbc93c279428df12"
},
{
"file": "scripts/ledger-industrial-correction-http.mjs",
"sha256": "6d34883f38850a04862f084bf7c372fca0e76db9fd7bc58bcad7842753a62554"
},
{
"file": "scripts/ledger-industrial-correction-proof.php",
"sha256": "80c613be879566fe0947def881bab16c8d335f310071dc30f3cdc6118b538bd5"
},
{
"file": "scripts/ledger-industrial-correction-race.php",
"sha256": "03f61ea28ea36861f0c416e306fbf23e4758e0960bf05f33005caf96b49b3029"
},
{
"file": "scripts/ledger-industrial-correction-security.php",
"sha256": "59d78838d992e1fc13586069945fe3cebc7c14c3286f0c602403c40bbf49379b"
},
{
"file": "scripts/summarize-ledger-industrial-correction.mjs",
"sha256": "5b437bafc553ae4d21aa1299a40a86365973a42d2257794f5624c6a8044a9004"
},
{
"file": "docs/GENERAL_LEDGER_INDUSTRIAL_CORRECTION_SCOPE.md",
"sha256": "163d63bfeb7b76f6177c88b4c83cc3149559abfd2f491397ce5c1a861a4d6036"
},
{
"file": "docs/GENERAL_LEDGER_INDUSTRIAL_CORRECTION_DELIVERY.md",
"sha256": "a9040aa59528af4acf5ac211d24d43624ee67ec03715ff128bceb56a8cad671b"
},
{
"file": "docs/GENERAL_LEDGER_INDUSTRIAL_DELIVERY.md",
"sha256": "70c03e5093b349b81aef3132223dfcca440037ab2ab64ae48be28ec72f4c356f"
},
{
"file": "README.md",
"sha256": "bacd393b9a4b98b1f57a52ab7ffff6a64b9e1f22818e38cceb2bd2a62f9f73b5"
},
{
"file": "docs/PRODUCT_DEMO.md",
"sha256": "ff5a7b474cc76fa0983b8054d161d41603dfa007a693f16f620cb44c411bdbed"
},
{
"file": "docs/SGF_MODULE_FLOW_PREPARATION.md",
"sha256": "94b277ed53dfa04543ce05b99191e1c76e94c0fc0b75990b059dc7f24353baaa"
},
{
"file": "docs/integration/sgf-flow-plan.json",
"sha256": "6f8270c0376b207bf592a405d6223f4b690d98b6b083194355df93cf256895f3"
}
],
"static_inventory": {
"file": "docs/proofs/module-flow-industrial-correction-update-20261103.json",
"sha256": "844eade754f98275e8a02bf0a62106530c422697a35dfa206b3493e354e562a5",
"modules": 6,
"stages": 13,
"sources": 33,
"mandatory_cycles": 0,
"database_connections": 0,
"operational_validation": false
},
"team_demo": {
"tag": "61b694d72ae4",
"pid": 26780,
"url": "http://127.0.0.1:8059/qa/cost-demo",
"cookie": "sgf_cost_61b694d72ae4",
"loopback_only": true,
"separate_team_database": true,
"old_demos_not_reset": true
},
"observed_result": {
"industrial_journals": 3,
"industrial_lines": 6,
"industrial_gross_minor": 542000,
"industrial_closing_minor": 182000,
"residual_exact": "300",
"residual_not_posted": true,
"joint_journals": 11,
"joint_lines": 23,
"joint_gross_minor": 872500,
"joint_closures": 1,
"client_balance_minor": 40000,
"direct_cost_balance_minor": 29500,
"supplier_balance_minor": 6000
},
"preservation": {
"old8058_flag_off_and_schema_absent": true,
"old8058_source_outbox_rights_and_three_provider_packet_exact": true,
"six_pending_records_untouched": true,
"blocked_cache_untouched": true,
"prior_demos_not_reset": true,
"unrelated_work_preserved": true,
"credentials_private": true,
"destination_unchanged": true
},
"limits": {
"visual_review_pending": true,
"actual_browser": false,
"large_volume_benchmarks": false,
"deployment_capacity_validated": false,
"all_six_modules_operationally_complete": false,
"additional_correction_chains": false,
"closed_period_correction_or_reopening": false,
"stock_valuation_payroll_or_residual_posting": false,
"new_payments_or_receipts": false,
"destination_migrations_or_grants": false,
"purchasing_activation": false,
"publication": false,
"checkpoint": false,
"acceptance_presumed": false
}
}
@@ -0,0 +1,369 @@
{
"increment": "COMMON-LEDGER-PAYABLE-SIM-v1",
"date": "2026-11-02",
"authorization": {
"answer": "Autorizar o incremento sintético proposto",
"approved_scope_sha256": "eb36d91e7532f49792287c26791892919380adefa77095c860d8201093175914",
"scope_archive_in_evidence": true,
"real_access": false,
"acceptance_or_checkpoint": false
},
"synthetic_only": true,
"tests": {
"passed": true,
"cases": [
{
"name": "prepare-independent-review-post-and-source-reconciliation",
"assertions": 9,
"passed": true
},
{
"name": "repetition-conflicting-key-and-recovery-after-period-version",
"assertions": 6,
"passed": true
},
{
"name": "rights-revoked-actor-person-and-no-inheritance",
"assertions": 4,
"passed": true
},
{
"name": "independence-rejection-and-preparer-ownership",
"assertions": 6,
"passed": true
},
{
"name": "source-rule-period-latest-capture-and-revision-changes",
"assertions": 10,
"passed": true
},
{
"name": "invalid-period-accounts-currency-foreign-scopes-and-extra-fields",
"assertions": 10,
"passed": true
},
{
"name": "failure-at-every-posting-boundary-and-idempotent-recovery",
"assertions": 12,
"passed": true
},
{
"name": "database-balance-guards-and-append-only-history",
"assertions": 16,
"passed": true
}
],
"assertions": 74,
"financial_fingerprint_equal": true,
"all_test_journals_rolled_back": true
},
"concurrency": {
"passed": true,
"waiting": {
"a": {
"chain_reaches_parent": true,
"wait_event": "transactionid",
"statement": "companies FOR UPDATE"
},
"b": {
"chain_reaches_parent": true,
"wait_event": "tuple",
"statement": "companies FOR UPDATE"
}
},
"both_completed_after_release": true,
"same_journal_id": true,
"journals": 1,
"lines": 2,
"posting_events": 1,
"replay_without_duplicate": true
},
"http": {
"passed": true,
"checks": 23,
"actual_http_kernel": true,
"recovered_all_three_original_command_receipts": true,
"one_effect_retained": true,
"read_transaction": {
"transaction": {
"isolation": "repeatable read",
"read_only": "on"
},
"writer_lock_queries": 0
},
"private_build_served": true,
"visual_review": false,
"browser_interactions_tested": false
},
"ui": {
"passed": true,
"targeted_static_checks": 3,
"production_build": true,
"private_build": true,
"public_demo_manifest_untouched": true,
"visual_review": false,
"browser_interactions_tested": false,
"general_navigation_check": "interrupted_after_no_completion; not counted as passed"
},
"posted_proposal_ui": {
"passed": true,
"posted_proposal_has_journal_reference": true,
"no_duplicate_apply_form": true
},
"preservation": {
"passed": true,
"read_only": true,
"financial_fingerprint_equal": true,
"financial_fingerprint": "a53684d829b0d177849d7e288d9656f0605c00077aa80faf249006ccd31c6f9b",
"journals": 1,
"lines": 2,
"debit_minor": 6000,
"credit_minor": 6000,
"posting_events": 1,
"synthetic_rights_only": true,
"default_flag": false
},
"integrity": {
"passed": true,
"balance_function_sha256": "2b68c5a39fd557d6ca2f30ab05e51d49431c70e40f5c8768cf6527676bd6098b",
"deferred_balance_constraint": true,
"review_source_account_checks_in_database": true,
"final_blade_rendered": true,
"financial_fingerprint_equal": true,
"absent_domain_tables_not_exercised": {
"stock": true,
"budget": true
}
},
"sources": [
{
"file": "packages/general-ledger/bootstrap.php",
"sha256": "50da6708053c4b3dedc3be43a909fd8d4db9eb2f10bfe341c661cc4ff130adab"
},
{
"file": "packages/general-ledger/src/LedgerSchema.php",
"sha256": "22cc9387de04eab28ce5522c687f7c162f9f83f9f479c89957064994e05591b5"
},
{
"file": "packages/general-ledger/src/PayableJournal.php",
"sha256": "96f01292bea51228ce7ec317708147a7d5d6a14dc2a97254be9b19b0dbe7099b"
},
{
"file": "packages/general-ledger/README.md",
"sha256": "ce84b27a3a573d6415a4a77ad0ebe2933b7aae0ff3b27ee8ed9ed1d889a992d3"
},
{
"file": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "e455092f25ee58d1493219d6a5ea8051929d5f2940132777a476673bf7b2b9f7"
},
{
"file": "app/Modules/Accounting/GeneralLedgerController.php",
"sha256": "f65d0d7d0783b1caf2b9cbf8f46dde7de1428a4e48947a387a9cf5e2c1e20382"
},
{
"file": "app/Providers/AppServiceProvider.php",
"sha256": "851968c34fb1c64517dd0e95abaef823ce044d368f2cc34287f7da233ce92cfe"
},
{
"file": "app/Shared/Context/ModuleNavigation.php",
"sha256": "59a50a468f922d1cdf439ec3dd42361cf1b7c51e32c625a7e444ab79ce1a3274"
},
{
"file": "config/general_ledger.php",
"sha256": "98cfe2fa7b4e4510c27478e08e745d1e248dfe86799bc9ff8ac77e777423f142"
},
{
"file": "routes/web.php",
"sha256": "6669c268e493bcac5f562ae2ec771e024a6d2d8e35555949b737741c41044d5f"
},
{
"file": "resources/views/accounting/general-ledger.blade.php",
"sha256": "49575e103ff0dd7019e9e16323d52ebed77980ea032003f03e4ee9ee2b058401"
},
{
"file": "resources/js/AccountingMenuWorkspace.jsx",
"sha256": "ad841dfad7d8408c620ba427500e9538bd539c7c4540b1b7803cda0caab6fd01"
},
{
"file": "scripts/ledger-run.mjs",
"sha256": "691e5453fe2010bc4775a6cf0f19180d8cbc04c43dbc6fbc04b4c6b731c636b3"
},
{
"file": "scripts/ledger-proof.php",
"sha256": "eebb3808fdb10f8ea8fd1242fd922517528529257776e75002bf31cf4b38b5fb"
},
{
"file": "scripts/ledger-cases.php",
"sha256": "03cb3e21cdb63ec8454dd3d68d9d458ddf5b514f5d12ed1d562a94de5d18bdc4"
},
{
"file": "scripts/ledger-race.php",
"sha256": "5a82aa8fd57a73dfeb14c7c43b49b747bf9096531afeb8911481a0e652d6fe46"
},
{
"file": "scripts/ledger-ui-check.mjs",
"sha256": "0bd486ee53ef6ccdd30426383433b0029f67b5f76a48d43875ebd95c5be1e68c"
},
{
"file": "scripts/ledger-http.mjs",
"sha256": "049229dd3bcc3351b69f34e46aebcf39618ef38134f98adeec971033957f7e55"
},
{
"file": "scripts/ledger-http-entry.php",
"sha256": "e86f40106b195d5de1905b63e052cb647ab4f7d84e0c065bfcdc2d8f28cb87b4"
},
{
"file": "scripts/ledger-http-router.php",
"sha256": "9fb96d3b6dbee9b6cccc6d9c713dfa458bc78a2cbd00d705d361209733660c3d"
},
{
"file": "scripts/ledger-demo.mjs",
"sha256": "0eea5f62a0ef832bd1d6d588ff86747f1ed40b4b02d7c61760eb1f53e62c5b96"
},
{
"file": "scripts/ledger-demo-check.mjs",
"sha256": "4d0b2ee08eec044fa4eaa35b3b04e6818705e4052c5b541d24b965667506926b"
},
{
"file": "scripts/ledger-demo-cookie-check.mjs",
"sha256": "24b3ca1b43f0df1086d54416d7d41243097a0defe67576e23c9ba547819ed3c2"
},
{
"file": "scripts/payable-history-sgf-proof.php",
"sha256": "eb786684eda612fdb44802fe75f6987537f5cfbfa79124450a9c0b7012743fd0"
},
{
"file": "scripts/summarize-ledger.mjs",
"sha256": "7e773b6ac7172fa05a70cca9f3f15d85e40e66cb0b3f173b56af80e1794705df"
},
{
"file": "docs/integration/sgf-flow-plan.json",
"sha256": "f1386de7b80c720fde48937face5551cd34eb74ef95f98adf041bf765cd8d025"
},
{
"file": "scripts/inspect-module-flow-plan.mjs",
"sha256": "f1b52208694e90dd6d5ed83792e97ee6f8772dddea8baefd29158b92b1f2bb59"
}
],
"evidence": [
{
"file": "private/ledger-d93394698835/ledger-fixture.json",
"sha256": "0305622fcd1063ee8a3f82fee6b115a78f5e5359fed8024dc2ba6885a77fc2e3"
},
{
"file": "private/ledger-d93394698835/ledger-cases.json",
"sha256": "8197a2fa96f3dee1e85b411c94b5f72f4a45ac3eac14241bc0062faffb7a0ff8"
},
{
"file": "private/ledger-d93394698835/ledger-race.json",
"sha256": "2444062deb2094c0398e7a1bed6a7b48fc46455b8f062c80598a5e620ebdb9ad"
},
{
"file": "private/ledger-d93394698835/ledger-http.json",
"sha256": "4d410555e0d618e3f55026b8d7cab8a0af7f3f31ca8d4af1f4222a8c520531e3"
},
{
"file": "private/ledger-d93394698835/ledger-http-read-mode.json",
"sha256": "e9fce3fc31a5456ca726ec899c1ab953a6019b1bd974ac7cc82099db757e6053"
},
{
"file": "private/ledger-d93394698835/ledger-ui.json",
"sha256": "d026aa920737e2bdd4bdb7b4c4e70ed6e55f9f5f3ecd17de742e40c05f7f12b3"
},
{
"file": "private/ledger-d93394698835/ledger-ui-state.json",
"sha256": "736ed3ab2cfdeca735195234d637a7df1159b07e19b7b822e81ea97a8895e96e"
},
{
"file": "private/ledger-d93394698835/ledger-post.json",
"sha256": "e1584081e2e25e9821e7ca26475efb0727567fc3a7c2a3431271b813bdada777"
},
{
"file": "private/ledger-d93394698835/ledger-integrity.json",
"sha256": "ca9c3345b99956d9906f3c02b063b486a387f08481a1300bbe158ff1f5d8374f"
},
{
"file": "private/ledger-d93394698835/approved-ledger-scope.md",
"sha256": "eb36d91e7532f49792287c26791892919380adefa77095c860d8201093175914"
}
],
"team_demo": {
"url": "http://127.0.0.1:8048/qa/ledger-demo",
"isolated_from_regression": true,
"checks": 13,
"initial_state": {
"passed": true,
"read_only": true,
"financial_fingerprint_equal": true,
"journals": 0,
"proposals": 0,
"ready_for_team_workflow": true,
"qa_grants": 6
},
"cookie_isolation": {
"passed": true,
"own_session_cookie": true,
"shared_xsrf_cookie_not_replaced": true,
"csrf_validation_retained": true,
"unauthorised_action_refused": true,
"no_business_effect": true
},
"evidence": [
{
"file": "private/ledger-5905dd7a5ecf/ledger-demo.json",
"sha256": "fc586f69ecc34f324e6ebf89765a7a78428dfbbea7fec5654588d3c62eed158a"
},
{
"file": "private/ledger-5905dd7a5ecf/ledger-demo-http.json",
"sha256": "8d792b83e4cd5e85fde7ac45795169cd2dd3d3bc668b997a8e35c49758669040"
},
{
"file": "private/ledger-5905dd7a5ecf/ledger-demo-state.json",
"sha256": "68ac4f71f4bdef7c298e8cd9b05f5c2e4141fb2cb377749e5b8ae4cf025a99ef"
},
{
"file": "private/ledger-5905dd7a5ecf/ledger-demo-cookie.json",
"sha256": "fe711353d9f743dddb01b799c6414fd18b5503877e775520fd0187f83af994ef"
}
]
},
"flow_inventory": {
"file": "docs/proofs/module-flow-ledger-update-20261102.json",
"sha256": "b3f56faa3d78379d6a3e8fa7b750cf2d93f5ad39e94ca3b4755025f8d77dec68",
"static_only": true
},
"previous_proof": {
"file": "docs/proofs/sgf-payable-report-20261102.json",
"sha256": "d16770a76e673972ad28dadbf5c911cd94fb867b120d51edc8a3995cdc3301dd",
"all_recorded_private_artifacts_preserved": true
},
"private_build": {
"manifest_sha256": "aa83d6b358515dc33f3753eb02b9d804dbe6b5ac6b659109ccac22c1ac3d1390",
"installed_public_manifest_not_replaced": true
},
"limits": [
"General module/navigation check did not complete and was interrupted; not counted as passing. Three targeted static permission/render checks, private production build and actual module/context HTTP refusals passed.",
"Only SGF QA adapter and one recognition scenario. Native SGC adapter, real PGC mapping, fiscal recognition, bank/settlement accounting, correction/reversal, operational periods/closing and deployment remain outside delivery.",
"Stock and budget tables are absent in this new minimal QA composition; those engines were not exercised. No new stock/budget binding or write is performed by the ledger.",
"The QA application role owns its isolated database. Production role/schema hardening and sustained volume/concurrency are not validated.",
"Configuration writes have no application API in this increment; future configuration/source writers must use the documented company serialization boundary."
],
"distinct_new_qa_rights": [
"general_ledger.view",
"general_ledger.prepare",
"general_ledger.validate",
"general_ledger.post"
],
"qa_grants": 6,
"real_grants": 0,
"operational_migrations": false,
"default_enabled": false,
"six_pending_associations_untouched": true,
"blocked_cache_not_cleared": true,
"demos_preserved": true,
"native_purchasing_activation": false,
"publication": false,
"checkpoint": false,
"visual_review_pending": true,
"deployment_capacity_validated": false
}
@@ -0,0 +1,543 @@
{
"increment": "COMMON-LEDGER-REPORTS-SIM-v1",
"consolidated_at_utc": "2026-11-02T22:57:39.867Z",
"functional_code": true,
"read_only_capability": true,
"new_business_effect_types": 0,
"new_rights": 0,
"new_dependencies": false,
"tests": {
"sgf_seed": {
"passed": true,
"dedicated_report_database": true,
"actual_workflow_recognitions": 1,
"sql_only_reporting_journals": 130,
"journals": 131,
"lines": 262,
"no_extra_financial_effects": true,
"financial_fingerprint": "bbe9f767fc9db4d021a7ac4b75ea69539d75a37f1cca44000596d7045b13d023"
},
"native_seed": {
"passed": true,
"dedicated_report_database": true,
"actual_workflow_recognitions": 1,
"sql_only_reporting_journals": 130,
"journals": 131,
"lines": 262,
"no_extra_financial_effects": true,
"financial_fingerprint": "c9ecdaf99410c7683313882e936ec88e611e523a5d7f6a154ca63560025e1958"
},
"sgf_service": {
"passed": true,
"checks": 21,
"opening_minor": 55,
"movement_minor": 13205,
"closing_minor": 13260,
"accounts": 122,
"account_lines": 111,
"page_sizes": [
25,
100
],
"exact_dates": true,
"running_balance_across_pages": true,
"revoked_access_refused": true,
"writer_locks": 0,
"financial_authority_unchanged": true,
"sql_fixture_explicit": true
},
"native_service": {
"passed": true,
"checks": 21,
"opening_minor": 55,
"movement_minor": 13205,
"closing_minor": 13260,
"accounts": 122,
"account_lines": 111,
"page_sizes": [
25,
100
],
"exact_dates": true,
"running_balance_across_pages": true,
"revoked_access_refused": true,
"writer_locks": 0,
"financial_authority_unchanged": true,
"sql_fixture_explicit": true
},
"sgf_http": {
"passed": true,
"checks": 21,
"host": "SGF",
"actual_http": true,
"read_only": true,
"writer_locks": 0,
"report_queries_per_page": 3,
"page_sizes": [
25,
100
],
"totals_cover_all_rows": true,
"source_evidence": true,
"no_commands": true,
"observations": [
{
"transaction": {
"isolation": "repeatable read",
"read_only": "on"
},
"report_queries": 3,
"writer_locks": 0
},
{
"transaction": {
"isolation": "repeatable read",
"read_only": "on"
},
"report_queries": 3,
"writer_locks": 0
}
],
"visual_review": false
},
"native_http": {
"passed": true,
"checks": 20,
"host": "SGC",
"actual_http": true,
"read_only": true,
"writer_locks": 0,
"report_queries_per_page": 3,
"page_sizes": [
25,
100
],
"totals_cover_all_rows": true,
"source_evidence": true,
"no_commands": true,
"observations": [
{
"transaction": {
"isolation": "repeatable read",
"read_only": "on"
},
"report_queries": 3,
"writer_locks": 0
},
{
"transaction": {
"isolation": "repeatable read",
"read_only": "on"
},
"report_queries": 3,
"writer_locks": 0
}
],
"visual_review": false
},
"sgf_isolation": {
"passed": true,
"checks": 8,
"foreign_tenant_company_unit_excluded": true,
"foreign_accounts_refused": true,
"missing_source_is_503": true,
"rollback_only": true,
"source_and_rights_unchanged": true
},
"native_isolation": {
"passed": true,
"checks": 8,
"foreign_tenant_company_unit_excluded": true,
"foreign_accounts_refused": true,
"missing_source_is_503": true,
"rollback_only": true,
"source_and_rights_unchanged": true
},
"actual_sales_cycle": {
"passed": true,
"checks": 6,
"read_only_commands_only": true,
"actual_posted_journals": 4,
"actual_posted_lines": 9,
"debit_minor": 240000,
"credit_minor": 240000,
"accounts": 4,
"all_account_balances_reconcile": true,
"ledger_and_closed_period_fingerprint_unchanged": true
},
"actual_mixed_sources": {
"passed": true,
"checks": 7,
"read_only_commands_only": true,
"actual_posted_journals": 2,
"actual_posted_lines": 5,
"debit_minor": 106000,
"credit_minor": 106000,
"accounts": 5,
"all_account_balances_reconcile": true,
"ledger_and_closed_period_fingerprint_unchanged": true
},
"actual_native_complete_cycle": {
"passed": true,
"checks": 5,
"read_only_commands_only": true,
"actual_posted_journals": 5,
"actual_posted_lines": 10,
"debit_minor": 22000,
"credit_minor": 22000,
"accounts": 3,
"all_account_balances_reconcile": true,
"ledger_and_closed_period_fingerprint_unchanged": true
},
"packaged_runtime": {
"passed": true,
"checks": 6,
"pinned_manifest_sha256": "cbc4ddbea15f5e396c92bc2e664b973138551928980f334bcf3eb0cf097cacb1",
"runtime_from_package": true,
"ui_from_package": true,
"journals": 1,
"lines": 2,
"debit_minor": 6000,
"sales_schema_not_installed": true,
"financial_authority_unchanged": true
},
"packaged_report_after_capability_guard": {
"passed": true,
"checks": 4,
"read_only_commands_only": true,
"actual_posted_journals": 1,
"actual_posted_lines": 2,
"debit_minor": 6000,
"credit_minor": 6000,
"accounts": 2,
"all_account_balances_reconcile": true,
"ledger_and_closed_period_fingerprint_unchanged": true
},
"frozen_previous_package_refusal": {
"passed": true,
"frozen_previous_package": true,
"missing_capability_status": 503,
"journals_unchanged": true,
"no_package_replacement": true
},
"team_readiness": {
"passed": true,
"checks": 8,
"demos": [
{
"port": 8053,
"status": 200,
"journals_observed": 0,
"report_has_commands": false
},
{
"port": 8051,
"status": 200,
"journals_observed": 0,
"report_has_commands": false
},
{
"port": 8052,
"status": 503,
"old_package_preserved": true
}
],
"no_business_commands": true,
"no_reset_or_package_replacement": true,
"visual_review": false
}
},
"evidence": [
{
"file": "private/ledger-217b04d4fc64/ledger-reports-seed.json",
"sha256": "27b00bf6d1e18f2efc7a3464ca61994a83fe100a1872a18de00cd833acd234fe"
},
{
"file": "private/ledger-native-9be03d75ee37/ledger-reports-seed.json",
"sha256": "038e1032c243c7479068eb797e9ab84d1f6e5508d359c452ccde92357591cf32"
},
{
"file": "private/ledger-217b04d4fc64/ledger-reports-cases.json",
"sha256": "55211e380268298f9c08aed9e76ce2d00a0c0ce019385bf86be88f7c81e2914a"
},
{
"file": "private/ledger-native-9be03d75ee37/ledger-reports-cases.json",
"sha256": "55211e380268298f9c08aed9e76ce2d00a0c0ce019385bf86be88f7c81e2914a"
},
{
"file": "private/ledger-217b04d4fc64/ledger-reports-http.json",
"sha256": "77a9d1761a3d9fd78c30e74fc02776062bfa34af2ab9b38d1ab80804391d5857"
},
{
"file": "private/ledger-native-9be03d75ee37/ledger-reports-http.json",
"sha256": "943b70ede0b9d7fbc921e2d0f53979cbe23eb8a536fd0be815e0a87bc333ec36"
},
{
"file": "private/ledger-217b04d4fc64/ledger-reports-isolation.json",
"sha256": "699fc3ec955506c98723199ebc50fc5d0ddf5b6260b1e1089a1c698d81fba033"
},
{
"file": "private/ledger-native-9be03d75ee37/ledger-reports-isolation.json",
"sha256": "699fc3ec955506c98723199ebc50fc5d0ddf5b6260b1e1089a1c698d81fba033"
},
{
"file": "private/ledger-7dabce07b0c3/ledger-reports-reconcile.json",
"sha256": "574316d0dc2f15909267f060b9ea35494ff5a17947677ea23da26a9a688d124d"
},
{
"file": "private/ledger-7a94f1f4fe7d/ledger-reports-reconcile.json",
"sha256": "b2c27e6cee8cfdf6a8ee4b988e3f88fe5e646713a76fd9e64e2768e5f9fa776d"
},
{
"file": "private/ledger-native-717011443eb8/ledger-reports-reconcile.json",
"sha256": "4888a27d2883d2cbad636612ddef1e9d9493d6bf58f094b9541733f35cec856d"
},
{
"file": "private/ledger-native-be2ea10293ea/ledger-reports-package.json",
"sha256": "a219d12bbfca39fb33e32a55ea9a2780d3fed75bbf0a77b5de15f036367eb517"
},
{
"file": "private/ledger-native-be2ea10293ea/ledger-reports-reconcile.json",
"sha256": "418c56cebf7491458b56641e719ac1ad6b053830b21372bb2e498f9452d673c7"
},
{
"file": "private/ledger-native-be2ea10293ea/ledger-reports-old-package-postcheck.json",
"sha256": "748b6b447f8e07d4f35a60265ddb8bfe28fa55c8b663222d09ac5bb5e6109ad9"
},
{
"file": "private/ledger-reports-demo-readiness.json",
"sha256": "e05a8824ba91aef391707f1d9906bc55201f7916ec4daf7731d2769b754ed5cb"
}
],
"previous_proofs": [
{
"file": "docs/proofs/common-ledger-sales-receivable-20261103.json",
"sha256": "b5572466111fb85d89a604fbaa423976ed17c61afc5e2e45ba392fb23aa82e8c"
},
{
"file": "docs/proofs/common-finance-bundle-20261103.json",
"sha256": "086c1556e7cefcf64a7064995a4aa6bd0e3aa9dd62cba66285b7801715f9f22c"
},
{
"file": "docs/proofs/common-ledger-complete-cycle-20261102.json",
"sha256": "23657d594b84e6aeeb0d16d45790d54feca04b12e2260cfffa4f8e4a37eaa0ce"
}
],
"previous_private_artifacts_verified": 37,
"distribution": {
"new_artifact": {
"files": 30,
"manifest_sha256": "cbc4ddbea15f5e396c92bc2e664b973138551928980f334bcf3eb0cf097cacb1",
"qa_only": true,
"runtime_and_ui_from_package_proven": true
},
"previous_artifact": {
"files": 25,
"all_pinned_hashes_preserved": true
},
"destination_package_replaced": false
},
"quality": {
"syntax": {
"php_files": 20,
"javascript_files": 4
},
"native_phpstan": {
"passed": true,
"level": 7,
"errors": 0,
"files": [
"app/Services/GeneralLedger.php",
"app/Http/Controllers/GeneralLedgerController.php"
],
"single_canonical_autoload": true,
"private_cache": true
},
"native_pint": {
"passed": true,
"same_two_files": true
},
"sgf_phpstan_pint": "not_installed_not_run",
"git_diff_check_both": true
},
"sources": [
{
"file": "packages/general-ledger/bootstrap.php",
"sha256": "d23afe918ec22ffe79c97166595738ce574d48c32f40c86256be9297a2205876"
},
{
"file": "packages/general-ledger/README.md",
"sha256": "e1d6469fc88bcdd324847ffef2f9ea9e5f4228aaf4e78dd47774203ef2ed4120"
},
{
"file": "packages/general-ledger/src/PayableJournal.php",
"sha256": "59e7569de153baa1cdb14de850f4a1b70d48931082f40f72af3830e9aaef2c68"
},
{
"file": "packages/general-ledger/src/LedgerReports.php",
"sha256": "70f2ac86c73c456dc292e00315ab601d33f012afc50c7dd55940026ac0df422b"
},
{
"file": "packages/general-ledger/src/ReportsWorkspace.php",
"sha256": "46238afbb708b6c111b90a8bb79f5dd6ae9b1189e926746efefeef497ff1fc33"
},
{
"file": "packages/general-ledger/ui/reports.php",
"sha256": "3391e1692b6d784268ee8032756fa286f2e2327fdb8936ce103c9f3fb2589aa8"
},
{
"file": "packages/general-ledger/ui/cycle.php",
"sha256": "defa8f4c98e083e0c9251544d4eeff262fcacbf745352bc5466c23642f422709"
},
{
"file": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "6c3eb3cabbdb471e512a94a5417f3db88c8fd29f568abfbd8dd50ec4959bd932"
},
{
"file": "app/Modules/Accounting/GeneralLedgerController.php",
"sha256": "20671ad2d344e10e351018d9dde48780cfce42627c207a0d6996a0f28e91a967"
},
{
"file": "resources/views/accounting/general-ledger.blade.php",
"sha256": "fc9e4877fc2e46074851293789e99381eb86c8139119fba99f4671aff4751ac5"
},
{
"file": "routes/web.php",
"sha256": "ccf83dd1600b514a592604f8d5ca36262cd559c039f3e9dc36c8b7d208081b41"
},
{
"file": "../compras/app/Services/GeneralLedger.php",
"sha256": "fc80b20ad0ab2dac1c8df4b535349d05b416f1c5f2eec3e7718eda51f6626485"
},
{
"file": "../compras/app/Http/Controllers/GeneralLedgerController.php",
"sha256": "23dc456ba90d099a92586492be9eb9a34096e8460f3cbec45ba78968bf685646"
},
{
"file": "../compras/routes/web.php",
"sha256": "58fd656f7e5cafc80176c9c05fa77703f29251c79ab66f65ef4bcc6aabfde299"
},
{
"file": "scripts/ledger-proof.php",
"sha256": "3c603ebffc7941f5e142642335512eef78a6803dcb7a2cd251205be7f0800795"
},
{
"file": "scripts/ledger-sales-proof.php",
"sha256": "6785f5e458dcd2ac0e3931d721c76909ede1ea5fed9314d6ad68138e765c355d"
},
{
"file": "scripts/ledger-http-entry.php",
"sha256": "f418b7fe7346fa6fc1f922e5e292633745ab401ea375bb1a6126cf9289c96960"
},
{
"file": "scripts/ledger-cycle-native-proof.php",
"sha256": "248feaed611110139ea6833d09887cf4455bb183154ac53b49025e1449d07b97"
},
{
"file": "scripts/ledger-reports-demo-check.mjs",
"sha256": "afcf4e664bb5e7ba4ba7ad741a0b1988634527eb76d9a8e82cc8ff8e4cdc82b4"
},
{
"file": "scripts/ledger-reports-http.mjs",
"sha256": "ae8307f5185dfdc7997df2cc57e387f5cf33ed8bb32e63a773338a90a8b89699"
},
{
"file": "scripts/ledger-reports-isolation.php",
"sha256": "fcda2ca9a1c06467c7f7b6803fb9868eb560bf687133cd0fb35eb4c38e28a295"
},
{
"file": "scripts/ledger-reports-observer.php",
"sha256": "7d8fdab4cbaed538603e2be9a7b1fe1613a96b72937f503a8924f47d026d5a63"
},
{
"file": "scripts/ledger-reports-proof.php",
"sha256": "d8c5e5f3210198b5a48b62c7dcad1369ba42d6d4f97545d409590d5cb9e7c5c3"
},
{
"file": "scripts/ledger-reports-reconcile.php",
"sha256": "2013d37460b7bd0f4d7a84534dfe7523f296ac8164513c637e8be975e438f600"
},
{
"file": "scripts/ledger-reports-run.mjs",
"sha256": "c740e3423233295897f8597a2546d335996d8d4074d8e0c9ae599e1fb9560bef"
},
{
"file": "scripts/summarize-ledger-reports.mjs",
"sha256": "59fac7fb9615c5e52519945365198dd13c9669b15da5b21d4054567b520074da"
},
{
"file": "docs/GENERAL_LEDGER_REPORTS_DELIVERY.md",
"sha256": "45347f82802e4007f36db2c9d212e9e13e212affca5ac6e12bc31a23172d093f"
},
{
"file": "docs/GENERAL_LEDGER_DIRECT_COST_SCOPE.md",
"sha256": "fda42b728512b5fc554db4dcd67a5b652aa1bdfd1e44b1de93b32a7d694aaf92"
},
{
"file": "README.md",
"sha256": "821308509e056c5688d4803dbd62b532f7bffae44d10a036e0771eb2e777c73f"
},
{
"file": "docs/PRODUCT_DEMO.md",
"sha256": "82644214120dffec0a5975b924cd28c68ee3f7b900fb0bb7b358ae323ccfa144"
},
{
"file": "docs/SGF_MODULE_FLOW_PREPARATION.md",
"sha256": "ace244edb3c52fd25751f7ef04102e874c752b0133af21e9f33861bc165c8226"
},
{
"file": "../compras/docs/relatorios-contabilisticos-ensaio.md",
"sha256": "ae5b9bd60f9fb611b6e0a456b834e877d5952c1e4047abd4688baae13487536c"
},
{
"file": "../compras/docs/desenvolvimento.md",
"sha256": "d01833de81f1b8790e02bc411fef01db6cceea023c9fdbc64cbb898df8fdf579"
},
{
"file": "../compras/docs/orientacoes-continuidade.md",
"sha256": "b9f809bdf17e531a4580de5214e684b59aa988e8ac485e11488528f1949d52fa"
}
],
"scope": {
"posted_journals_only": true,
"dates_inclusive": true,
"page_sizes": [
25,
100
],
"server_side_aggregation": true,
"running_balance_before_pagination": true,
"trial_balance_report_queries": 3,
"authorization_and_schema_queries_additional": true,
"missing_capability_or_schema_status": 503
},
"preservation": {
"six_pending_records_untouched": true,
"blocked_cache_not_cleared": true,
"existing_demos_not_reset": true,
"existing_valid_proofs_preserved": true,
"unrelated_work_preserved": true,
"real_or_public_rights_unchanged": true
},
"next_scope": {
"file": "docs/GENERAL_LEDGER_DIRECT_COST_SCOPE.md",
"sha256": "fda42b728512b5fc554db4dcd67a5b652aa1bdfd1e44b1de93b32a7d694aaf92",
"status": "proposal_only_requires_explicit_authorization",
"implemented": false
},
"limits": {
"visual_review_pending": true,
"browser_automation": false,
"deployment_capacity_validated": false,
"new_large_volume_benchmarks": false,
"new_indexes": false,
"legal_financial_statements": false,
"stock_cost_payroll_accounting": false,
"real_operations": false,
"destination_migrations": false,
"publishing": false,
"purchasing_activation": false,
"checkpoint": false,
"acceptance_presumed": false
}
}
@@ -0,0 +1,701 @@
{
"increment": "COMMON-LEDGER-SALES-RECEIVABLE-SIM-v1",
"consolidated_at_utc": "2026-11-02T22:39:33.997Z",
"functional_code": true,
"synthetic_only": true,
"status": "implemented_and_tested_with_explicit_limits",
"authorization": {
"answer": "Autorizar o ciclo sintético proposto",
"approved_scope_sha256": "b689ed1624eba2f9346427d41f5d68be2168c7b482cad8030522876b302df1a3",
"archive_matches_presented_proposal": true
},
"tests": {
"source_rule_recovery": {
"passed": true,
"cases": [
{
"name": "source-opening-rights-independence-and-three-line-recovery",
"checks": 19,
"passed": true
},
{
"name": "current-rule-period-and-scope-revalidation",
"checks": 5,
"passed": true
},
{
"name": "guard-negative-and-page-query-contract",
"checks": 4,
"passed": true
}
],
"checks": 29,
"rollback_only": true,
"issued_document_and_rights_preserved": true
},
"actual_http_workflow": {
"passed": true,
"checks": 95,
"actual_http": true,
"real_csrf": true,
"read_transaction": {
"transaction": {
"isolation": "repeatable read",
"read_only": "on"
},
"writer_locks": 0
},
"invoice_id": 1,
"obligation_id": 3,
"allocation_ids": [
5,
7
],
"reversal_id": 8,
"source_pdf_sha256": "59c78788f00158ee2401462f2ac79af9f962898c7346873cf7e9957b9a9f6530",
"principal_minor": 100000,
"financial_balance_minor": 40000,
"client_account_minor": 40000,
"journals": 4,
"lines": 9,
"gross_debit_minor": 240000,
"gross_credit_minor": 240000,
"closed": true,
"visual_review": false,
"browser_automation": false
},
"concurrency": {
"passed": true,
"workers": 6,
"three_line_post": {
"waiting": {
"a": {
"chain_reaches_parent": true,
"wait_event": "tuple"
},
"b": {
"chain_reaches_parent": true,
"wait_event": "transactionid"
}
},
"read_before_release": {
"status": 200,
"balance": "1000.00",
"journals": 0
},
"results": {
"a": {
"status": 200,
"result": {
"state": "posted",
"proposal_id": 1,
"journal_id": 1,
"replayed": false
}
},
"b": {
"status": 200,
"result": {
"state": "posted",
"proposal_id": 1,
"journal_id": 1,
"replayed": false
}
}
},
"changed_effect_id": null
},
"stale_after_confirmed_allocation": {
"waiting": {
"a": {
"chain_reaches_parent": true,
"wait_event": "transactionid"
}
},
"read_before_release": null,
"results": {
"a": {
"status": 409,
"message": "Factos, regras ou período mudaram; prepare nova conferência."
}
},
"changed_effect_id": 5
},
"fresh_period_close": {
"waiting": {
"a": {
"chain_reaches_parent": true,
"wait_event": "transactionid"
},
"b": {
"chain_reaches_parent": true,
"wait_event": "tuple"
}
},
"read_before_release": null,
"results": {
"a": {
"status": 200,
"result": {
"state": "closed",
"closure_id": 1,
"period_version": 2,
"replayed": false
}
},
"b": {
"status": 200,
"result": {
"state": "closed",
"closure_id": 1,
"period_version": 2,
"replayed": false
}
}
},
"changed_effect_id": null
},
"original_invoice_unchanged": true,
"journals": 2,
"lines": 5,
"financial_balance": "600.00",
"closures": 1,
"read_finished_before_writer_release": true
},
"concurrent_source_postcheck": {
"passed": true,
"current_invoice_matches_posted_document_revision": true,
"matching_journals": 2,
"pdf_hash_matches": true,
"no_business_writes": true
},
"latest_schema_workflow": {
"passed": true,
"checks": 10,
"invoice_id": 1,
"obligation_id": 1,
"receipts": [
2,
3
],
"allocations": [
3,
5
],
"reversal_effect_id": 6,
"invoice_journal_id": 1,
"journals": 4,
"lines": 9,
"gross_debit_minor": 240000,
"gross_credit_minor": 240000,
"client_balance_minor": 40000,
"financial_balance_minor": 40000,
"period_closed": true,
"origin_unchanged": true
},
"latest_final": {
"passed": true,
"invoice_snapshot_sha256": "0ac6388831d11b86f5b75fc449dcfc44de42f079938477a4e5b7fa4c343c839e",
"pdf_sha256": "59c78788f00158ee2401462f2ac79af9f962898c7346873cf7e9957b9a9f6530",
"original_snapshot_and_pdf_preserved": true,
"principal_minor": 100000,
"balance_minor": 40000,
"client_account_minor": 40000,
"journals": 4,
"lines": 9,
"gross_debits_minor": 240000,
"gross_credits_minor": 240000,
"late_line_constraint_deferred": true,
"closed_ui_read_only": true,
"explicit_qa_runtime_flag": true
},
"defaults": {
"passed": true,
"default_without_environment": false,
"explicit_owned_qa_runtime": true,
"real_environment_not_changed": true,
"no_business_writes": true
},
"latest_http_read": {
"passed": true,
"checks": 10,
"latest_schema": true,
"read_only": true,
"writer_locks": 0,
"journals": 4,
"lines": 9,
"balance_minor": 40000,
"closed_forms_hidden": true,
"generic_diary_sales_origin": true,
"no_business_commands": true,
"visual_review": false
},
"schema_scope_pagination": {
"passed": true,
"checks": 12,
"authorised_foreign_contexts_refused": [
"unit",
"company",
"tenant"
],
"revoked_rights_refused": true,
"late_third_line_refused_by_database": true,
"fourth_line_refused": true,
"history_pagination_bounded": true,
"rollback_only": true
},
"module_isolation": {
"passed": true,
"checks": 4,
"picker_respects_module_associations": true,
"source_without_association_refused": true,
"whole_period_still_blocks_unaccounted_source": true,
"associations_unchanged_after_rollback": true
},
"supplier_compatibility": {
"passed": true,
"cases": [
{
"name": "prepare-independent-review-post-and-source-reconciliation",
"assertions": 9,
"passed": true
},
{
"name": "repetition-conflicting-key-and-recovery-after-period-version",
"assertions": 6,
"passed": true
},
{
"name": "rights-revoked-actor-person-and-no-inheritance",
"assertions": 4,
"passed": true
},
{
"name": "independence-rejection-and-preparer-ownership",
"assertions": 6,
"passed": true
},
{
"name": "source-rule-period-latest-capture-and-revision-changes",
"assertions": 10,
"passed": true
},
{
"name": "invalid-period-accounts-currency-foreign-scopes-and-extra-fields",
"assertions": 10,
"passed": true
},
{
"name": "failure-at-every-posting-boundary-and-idempotent-recovery",
"assertions": 12,
"passed": true
},
{
"name": "database-balance-guards-and-append-only-history",
"assertions": 16,
"passed": true
}
],
"assertions": 74,
"financial_fingerprint_equal": true,
"all_test_journals_rolled_back": true
},
"native_cycle_compatibility": {
"passed": true,
"checks": 23,
"rollback_only": true,
"principal_minor": 6000,
"allocated_balance_minor": 4000,
"final_balance_minor": 6000,
"debit_minor": 22000,
"credit_minor": 22000,
"journals": 5,
"lines": 10,
"correction_pairs": 1,
"period_closed": true,
"obligation_id": 1,
"recognition_journal_id": 1,
"allocation_id": 1,
"reversal_id": 1,
"correction_id": 1,
"period_check_id": 1
},
"native_sales_refusal": {
"passed": true,
"sales_not_composed": true,
"no_journal_or_proposal": true,
"no_sgf_sales_table_dependency": true
},
"supplier_customer_coexistence": {
"passed": true,
"customer_supplier_ids_coincide": true,
"one_writer": true,
"customer_filter_journals": 1,
"customer_filter_events": 3,
"supplier_filter_journals": 1,
"supplier_filter_events": 3,
"journals": 2,
"lines": 5,
"gross_debit_minor": 106000,
"gross_credit_minor": 106000,
"customer_balance_minor": 100000,
"supplier_balance_minor": 6000,
"joint_period_closed": true,
"supplier_origin_is_controlled_synthetic_receipt_not_live_import": true
},
"team_access": {
"passed": true,
"declared_roles": 3,
"unlisted_users_with_grants": 0,
"pruned_helper_grants": 5,
"original_users_and_approvals_preserved": true,
"business_effects": 0
},
"team_http_readiness": {
"passed": true,
"checks": 29,
"url": "http://127.0.0.1:8053/qa/sales-demo",
"three_roles": true,
"one_actual_test_invoice": true,
"financial_records": 0,
"financial_effects": 0,
"journals": 0,
"no_business_commands": true,
"private_build": true,
"module_generation_checked_by_ui": true,
"unlisted_users_with_grants": 0,
"visual_review": false,
"browser_automation": false
},
"rendered_forms": {
"passed": true,
"checks": 10,
"rendered_script_sha256": "b62b3a2e4869f980bd397c0ed20eeec4d5076aeadfe4369cf47bfb889430fdee",
"mock_dom": true,
"actual_browser": false,
"no_business_requests": true,
"exact_amount_and_hash_types": true,
"stable_repetition": true,
"stale_generation_cannot_self_refresh": true,
"pdf_failure_recovery": true
}
},
"evidence": [
{
"file": "private/ledger-fc19bcb8d9de/sales-cases.json",
"sha256": "aa53636592906b6c0a376dcd68cfe9ec50fc2679774236026a52c183d8e10664"
},
{
"file": "private/ledger-fc19bcb8d9de/sales-http.json",
"sha256": "56d51b997dcb4184a969704112b868bd4f7c0715662f3b3b7761563326a766c1"
},
{
"file": "private/ledger-78270fedb4e4/sales-race.json",
"sha256": "deaa9632ab2417e9ef62c7b73de0d41e966b91e421582a379d21197360846ae7"
},
{
"file": "private/ledger-78270fedb4e4/sales-source-postcheck.json",
"sha256": "e40b2b431008ec728105c05473f5bb4bbb78972104ae345e8f1d196f16717f6b"
},
{
"file": "private/ledger-7dabce07b0c3/sales-workflow.json",
"sha256": "9cdba15b0838402b5750aa933793c584eb432a2c3735efd1abe432fa8e4afd64"
},
{
"file": "private/ledger-7dabce07b0c3/sales-final.json",
"sha256": "e3d539914dbe002888526aff7693c9953b858d33e01e0770ad6afe91d3394572"
},
{
"file": "private/ledger-7dabce07b0c3/sales-defaults.json",
"sha256": "94d861c091916b0e83532f4624143f2057362dc143e76b540115b0f659c1a0e4"
},
{
"file": "private/ledger-7dabce07b0c3/sales-readcheck.json",
"sha256": "892d07e409982bbdfca33be32d3b77ce50a6b5d5892e1100cd14073b7cbffb7a"
},
{
"file": "private/ledger-2b60f38982b1/sales-integrity.json",
"sha256": "b6ef7a4f22c9ef2001beb03a37de066d3adb9344e8000ea393d87766497305ee"
},
{
"file": "private/ledger-2b60f38982b1/sales-module-check.json",
"sha256": "7099f1f965eccce300993245700ddeb77e14b78735df8b2a5bdd727784d8d0d5"
},
{
"file": "private/ledger-c47dfbc3fad1/ledger-cases.json",
"sha256": "8197a2fa96f3dee1e85b411c94b5f72f4a45ac3eac14241bc0062faffb7a0ff8"
},
{
"file": "private/ledger-native-c5ff3a6aa5a3/native-cycle-cases.json",
"sha256": "e79f0c9c4423abbe8fac86ee5fe38ced1a3ced3491fd8db4229aaf5e461a2344"
},
{
"file": "private/ledger-native-c5ff3a6aa5a3/sales-capability-refusal.json",
"sha256": "92fbe119b7a8d3fee43412f69a4b8a7d5cebeb4e746fe530e67f354ea3d516ee"
},
{
"file": "private/ledger-7a94f1f4fe7d/sales-coexistence.json",
"sha256": "6029db775441a12385094ad557a73df84db607a1327a85803cb0a27dd0f47153"
},
{
"file": "private/ledger-b4c7b11c1593/sales-demo-access.json",
"sha256": "477566f13cc2ff1be646445adfcac50b5dd272c40eae6c017c9bc3fee0f03d8c"
},
{
"file": "private/ledger-b4c7b11c1593/sales-demo-http.json",
"sha256": "26bc004c0d7f8688ac13854965255e8ba2082f189f25f082d6acaaebe9d9492e"
},
{
"file": "private/ledger-b4c7b11c1593/sales-forms.json",
"sha256": "a9fcfdb6cebbddeb74ae2cfede9e1e46509ac8b6515a19e3b5fdee8a1ddaa355"
},
{
"file": "private/ledger-sales-approved-scope.md",
"sha256": "b689ed1624eba2f9346427d41f5d68be2168c7b482cad8030522876b302df1a3"
}
],
"previous_proofs": [
{
"file": "docs/proofs/common-finance-bundle-20261103.json",
"sha256": "086c1556e7cefcf64a7064995a4aa6bd0e3aa9dd62cba66285b7801715f9f22c"
},
{
"file": "docs/proofs/common-ledger-complete-cycle-20261102.json",
"sha256": "23657d594b84e6aeeb0d16d45790d54feca04b12e2260cfffa4f8e4a37eaa0ce"
},
{
"file": "docs/proofs/common-ledger-payable-20261102.json",
"sha256": "330b4b15ad952d014a828d17ec810a65c4a724d64cf91fd04807e7f37f4ab44b"
},
{
"file": "docs/proofs/sgf-financial-ledger-flow-20261102.json",
"sha256": "5d384fd07b26cc38ad3946a6ec27341c7e177152a32d53ed1d5d56743c165836"
}
],
"previous_private_artifacts_verified": 33,
"frozen_native_bundle": {
"files": 25,
"manifest_sha256": "6a507ea7d708a12a8e526e4c610696d8db84079d18aede470237b65505630e7e",
"all_hashes_preserved": true,
"sales_extension_not_installed": true
},
"sources": [
{
"file": "packages/general-ledger/bootstrap.php",
"sha256": "8de5e1e8cd5b6ca96f34f33294284106015ae5b893088c4651200df40d1380e0"
},
{
"file": "packages/general-ledger/README.md",
"sha256": "c59638392018a9e9da57e73a2ce5e7adc12b9c618922f710ab7052950a158f09"
},
{
"file": "packages/general-ledger/src/LedgerSchema.php",
"sha256": "1fb2490fe8d4d206d2f8157803307cdd4e2f733150d0fec4993a7e229fce58cb"
},
{
"file": "packages/general-ledger/src/PayableJournal.php",
"sha256": "982479060b0b61dd8089f7994241df0c098fc4d0a9258f494698c030ff438fd1"
},
{
"file": "packages/general-ledger/src/LedgerCycle.php",
"sha256": "4589d7270c12d90e171109e6cf3af452831b03c896881e53a32307673c501331"
},
{
"file": "packages/general-ledger/src/CycleSchema.php",
"sha256": "25407f9ea4321ee3acb0c310b5d981b8fdaf89c5464d32878ecc57c29e60972d"
},
{
"file": "packages/general-ledger/src/CycleWorkspace.php",
"sha256": "a76bf1b4c18c3a0585de744d58e38e736777831a019200150deb1615b6fe5010"
},
{
"file": "packages/general-ledger/src/LedgerSales.php",
"sha256": "ea21a8376705e413b824513d30243c271870b2bfbc7a9af2fd922916a145e130"
},
{
"file": "packages/general-ledger/src/SalesSchema.php",
"sha256": "95388e12e631f89a200e764a86d6da42e95812955e62fa2e36166168c06119d6"
},
{
"file": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "6ec89d6815acd9133c3b93d218395aa6e6392dd01e2cdd03e8ea73fd459097a1"
},
{
"file": "app/Modules/Accounting/GeneralLedgerController.php",
"sha256": "d8a8c81f23986dd411535b38085ec51a469357413f1a8a094dceb99a57866179"
},
{
"file": "app/Modules/Accounting/SalesLedgerController.php",
"sha256": "7a47a8b53a26b4541b224de71611721ec416dfe47736da4242fced593ac1d6aa"
},
{
"file": "app/Modules/Accounting/SalesLedgerSource.php",
"sha256": "6a6efdc690c4ae6bd66032475ce70493c9e8b8e51bfee1429478c29d8989e9e7"
},
{
"file": "app/Modules/Services/ServiceReceivables.php",
"sha256": "725bc8773a78cfd05dd0a729d885a97c0eef43854ca7ab4210b4d5e80d5d54ec"
},
{
"file": "app/Modules/Purchasing/SupplierPayables.php",
"sha256": "68ec6bc24321604cfa2b2126fc3d894a2dd30a1a272536e50c93830029f0f97e"
},
{
"file": "app/Shared/Testing/TestingDatabaseGuard.php",
"sha256": "42c67eb798b2fc43fcf0da125f46b72c79d507e8def02a733dee30a5d305c9be"
},
{
"file": "config/sales_ledger.php",
"sha256": "da275ef0283ee527be42700d68450dec466ba048f2ac8a803d4434ce54fc12c8"
},
{
"file": "config/general_ledger.php",
"sha256": "2b0794ca0f3337acd3fc7793f209b5f649d0a5cc3c94b6bdc2a547faaced64f4"
},
{
"file": "routes/web.php",
"sha256": "8ee70c479f8fd983456a62d827a38452511449ef08e7a9bc963e60599914da08"
},
{
"file": "resources/views/accounting/general-ledger.blade.php",
"sha256": "4a26d26ce7410c618bae049c0037d2c21dd811942de3c61891fe045cd2093ad5"
},
{
"file": "resources/views/accounting/sales-ledger.blade.php",
"sha256": "df8406a3539ac098780de6b20edb630e3a3a6ce6a2778c0a435f340905e36696"
},
{
"file": "resources/views/accounting/sales-demo-entry.blade.php",
"sha256": "161f2e531eb7225d33c090065f9493246670b4df2b7334c855509411191eaf09"
},
{
"file": "scripts/payable-history-sgf-proof.php",
"sha256": "0fe3fb06270a944d9158a9eabcfb445c6a7383be2fd35dea2797b01180442b2f"
},
{
"file": "scripts/ledger-run.mjs",
"sha256": "4d5834803aa37b76c7c2bf0e7c44efbe4bdbfe84ea6abff3bdd008f3ba93212a"
},
{
"file": "scripts/ledger-sales-cases.php",
"sha256": "c5b2a9efb2f460b8dd8bcc301636830f57d8833ddb57c9270783a60612385674"
},
{
"file": "scripts/ledger-sales-coexistence.php",
"sha256": "3c5fac7f481818f82d799fa83471a26770b25f8394315f5f889945c230ef4367"
},
{
"file": "scripts/ledger-sales-demo-check.mjs",
"sha256": "a0272d43016820ccc588bf2f9e9d96889db046881ddf8f12a4ee4f089f76a1ce"
},
{
"file": "scripts/ledger-sales-demo.mjs",
"sha256": "00c325206b46eeb14befd57a1602452f46f76481148a300090bc0e4d55a56038"
},
{
"file": "scripts/ledger-sales-form-check.mjs",
"sha256": "68683c6661116cbf4488ce3438d3372e5116098bd0e79d8660e04b3cb95a6aa2"
},
{
"file": "scripts/ledger-sales-http-entry.php",
"sha256": "79130286eb828b463a063391315750ee926e8a7141f4ef7f367ffa1a606342a4"
},
{
"file": "scripts/ledger-sales-http-router.php",
"sha256": "298f987b035b7b2049e7efc6f29bf8a0b08a93d438566d847113c38b90090a1d"
},
{
"file": "scripts/ledger-sales-http.mjs",
"sha256": "9d86f4b0c417e5dbe3a09479dd60cbd12a9f4e493951ee276b0dd8fabab3f8e1"
},
{
"file": "scripts/ledger-sales-integrity.php",
"sha256": "5ef84735ef814aebed369331c15241a3c7a85e3c8ac25b0947a82bee3bede9b6"
},
{
"file": "scripts/ledger-sales-proof.php",
"sha256": "42f3501ba095e4f28e293425e51d78acec9598739d5ca9248838588c72215c6f"
},
{
"file": "scripts/ledger-sales-race.php",
"sha256": "e213420073fb4c7d3a1fe39cd3850e38bc3b3bbe07ae99110dd5225c7a11195c"
},
{
"file": "scripts/ledger-sales-readcheck.mjs",
"sha256": "fa4d71ce14604caa6bc29a611ab600aef9aa312db6f54f41e018b13dc50a6c8f"
},
{
"file": "scripts/summarize-ledger-sales.mjs",
"sha256": "119178f3c4b67711a957cc6ddd43e27efd2c7f5ea371345522d855cebfd0ef11"
},
{
"file": "docs/GENERAL_LEDGER_SALES_RECEIVABLE_SCOPE.md",
"sha256": "3ac91e356b701dc1149d00fb6cb10a9d289fdde663112381dcd1d366c48405f5"
},
{
"file": "docs/GENERAL_LEDGER_SALES_RECEIVABLE_DELIVERY.md",
"sha256": "fa2a9ff135cd7af412de852d2e7a922e6825b350bf26545b7786f88e3c34b3de"
},
{
"file": "README.md",
"sha256": "00480f56801a8cadedba48501562d82da6b847390cbd4626012e4a9d01fd1f58"
},
{
"file": "docs/PRODUCT_DEMO.md",
"sha256": "062cd312396d72769c61374c01627baec3eecf198450b043dc46a7975cae587c"
},
{
"file": "docs/SGF_MODULE_FLOW_PREPARATION.md",
"sha256": "ca7d51984434a42f73a439eabcfbca086b7fb56142f2da5e396d472b973ae497"
}
],
"quality": {
"syntax": {
"php_files": 26,
"javascript_files": 7
},
"git_diff_check_sgf_and_native": true,
"phpstan_sgf": "not_installed_not_run",
"pint_sgf": "not_installed_not_run",
"new_dependencies": false
},
"team_demo": {
"tag": "b4c7b11c1593",
"pid": 27308,
"url": "http://127.0.0.1:8053/qa/sales-demo",
"cookie": "sgf_sales_b4c7b11c1593",
"loopback_only": true,
"separate_team_database": true,
"old_demos_preserved": true
},
"rights": {
"distinct_ledger_rights": 7,
"ledger_grants_per_fixture": 9,
"qa_only": true,
"real_grants": 0
},
"preservation": {
"six_pending_associations_untouched": true,
"blocked_cache_not_cleared": true,
"existing_demos_not_reset": true,
"unrelated_work_preserved": true,
"previous_valid_proofs_preserved": true
},
"limits": {
"visual_review_pending": true,
"actual_browser_executed": false,
"deployment_capacity_validated": false,
"new_load_benchmarks": false,
"new_indexes": false,
"real_tax_or_chart": false,
"real_monetary_operations": false,
"destination_migrations": false,
"real_or_public_rights_changes": false,
"reopening": false,
"stock_cost_payroll_accounting": false,
"publication": false,
"purchasing_activation": false,
"acceptance_presumed": false,
"checkpoint": false
}
}
@@ -0,0 +1,484 @@
{
"date": "2026-11-03T07:55:49.842Z",
"increment": "COMMON-LEDGER-STOCK-VALUATION-SIM-v1",
"functional_code": true,
"passed": true,
"targeted_checks": 146,
"tests": {
"cases": {
"file": "private/stock-ledger-b6b0e5d2fbc5/cases.json",
"sha256": "523592f31e15f34a4f278f9aa70ea4866842ad84e30b3c46461bd31ac9ec6126",
"checks": 31,
"result": {
"passed": true,
"checks": [
"missing rate visible; no invented values",
"missing rate cannot capture",
"unvalued movements block close conference",
"case rollback preserves physical/financial/rights fingerprint",
"rate replay no duplication",
"changed rate replay refused",
"rate self review refused",
"rate review replay unique",
"read actor cannot prepare rate",
"case rollback preserves physical/financial/rights fingerprint",
"issue cannot precede valued receipt",
"return cannot precede valued issue",
"actual2/-1/+0.5 at50 gives100/50/25",
"server pagination boundary",
"unsupported page size refused",
"wrong physical effect type refused",
"journal date must match physical date",
"other unit cannot read mapped movement",
"case rollback preserves physical/financial/rights fingerprint",
"same-value rate successor invalidates old capture",
"new capture after rate version change",
"case rollback preserves physical/financial/rights fingerprint",
"fault rolls back header lines and receipt",
"exact and other-key retry one journal",
"stock correction excluded",
"case rollback preserves physical/financial/rights fingerprint",
"actual later physical movement invalidates pending capture",
"case rollback preserves physical/financial/rights fingerprint",
"revoked post right refused before existing effect replay",
"rate correction after posting excluded",
"case rollback preserves physical/financial/rights fingerprint"
],
"all_cases_rolled_back": true,
"no_persistent_journals": true
}
},
"concurrency": {
"file": "private/stock-ledger-b6b0e5d2fbc5/race.json",
"sha256": "02a747b3629a5df08945bb5c8235064f5bdd79130b788e93b7648d2108fbc9e8",
"checks": 3,
"result": {
"passed": true,
"checks": [
"released same-key confirmation returns original journal without duplication",
"released worker rechecks changed period and refuses stale capture without receipt",
"two workers leave one journal and original physical/financial/rights state"
],
"workers": [
{
"scenario": "same_key_commit",
"observed_wait": "transactionid",
"blocker_observed": true,
"status": 200,
"journals_after": 1
},
{
"scenario": "period_changed_then_refuse",
"observed_wait": "transactionid",
"blocker_observed": true,
"status": 409,
"journals_after": 1
}
],
"source_fingerprint_unchanged": true,
"not_throughput_measurement": true
}
},
"workflow": {
"file": "private/stock-ledger-b6b0e5d2fbc5/workflow.json",
"sha256": "b73de0985e9775eb7ed8010c8ef06f98acd1bdfdb81e72511c8c7220c36d332e",
"checks": 4,
"result": {
"passed": true,
"checks": [
"same core reports gross175 stock75 consumption25",
"period close replay unique",
"three journals six lines one close",
"valuation leaves physical financial budget and grants intact"
],
"journals": 3,
"lines": 6,
"gross_minor": 17500,
"stock_minor": 7500,
"consumption_minor": 2500,
"physical_quantity_milli": 1500,
"closures": 1,
"physical_financial_rights_fingerprint_unchanged": true
}
},
"isolation_sql": {
"file": "private/stock-ledger-b6b0e5d2fbc5/extra.json",
"sha256": "4cf70e03a3d9ed1ba04f04a397c1cbea2310fc16cd0fd37bd73a8fff5c7fd9a4",
"checks": 9,
"result": {
"passed": true,
"checks": [
"same-person rate review refused with both actual rights",
"another tenant cannot resolve physical source",
"another company cannot resolve mapped book",
"case rollback preserves physical/financial/rights fingerprint",
"SQL forbids a second stock journal even with a forged new effect key",
"case rollback preserves physical/financial/rights fingerprint",
"SQL rejects amount forged independently of reviewed PHP source",
"same-person journal review refused with both actual rights",
"case rollback preserves physical/financial/rights fingerprint"
],
"all_extra_physical_and_sql_changes_rolled_back": true,
"existing_closed_book_preserved": true
}
},
"sql_predecessor": {
"file": "private/stock-ledger-255565a5f62d/order-guard.json",
"sha256": "ad718dde00053e06d68b216f288a66a2033cd5044ba8b601f47a83fc4d789d55",
"checks": 3,
"result": {
"passed": true,
"checks": [
"SQL independently refuses issue before receipt valuation",
"failed order guard leaves no partial journal",
"case rollback preserves physical/financial/rights fingerprint"
],
"all_changes_rolled_back": true
}
},
"http": {
"file": "private/stock-ledger-255565a5f62d/http-proof.json",
"sha256": "cd046fb28f1bc3f6578907959c7e5fdbe0f8e6284cd46ce19b58b9ee31913a08",
"checks": 40,
"result": {
"passed": true,
"checks": [
"native QA entry prepare",
"native QA entry validate",
"native QA entry read",
"open UI presents rate and incomplete amounts",
"API server page100 has three actual movements",
"unknown read parameter refused",
"stale context refused",
"CSRF retained",
"read profile cannot prepare rate",
"rate proposal through HTTP",
"rate exact retry same id",
"rate receipt recovery does not execute",
"another actor cannot read rate receipt",
"rate approval through HTTP",
"capture actual stock movement 1",
"review UI shows exact impact revision and dependencies",
"independent HTTP journal review 1",
"HTTP post selected stock movement 1",
"HTTP retry one journal 1",
"capture actual stock movement 2",
"review UI shows exact impact revision and dependencies",
"independent HTTP journal review 2",
"HTTP post selected stock movement 2",
"HTTP retry one journal 2",
"capture actual stock movement 3",
"review UI shows exact impact revision and dependencies",
"independent HTTP journal review 3",
"HTTP post selected stock movement 3",
"HTTP retry one journal 3",
"journal receipt recovery does not execute",
"another actor cannot read journal receipt",
"same common balancete rendered",
"same common stock account ledger rendered",
"prepare period through HTTP",
"validate period through HTTP",
"close period through HTTP",
"HTTP close retry same receipt",
"closed workspace has no mutation forms",
"anonymous API refused",
"HTTP cycle exact totals preserves physical budget financial and grants"
],
"actual_http": true,
"journals": 3,
"lines": 6,
"closures": 1,
"physical_financial_rights_unchanged": true,
"visual_review": false
}
},
"sgf_observer": {
"file": "private/stock-ledger-observer-0f9fe83534bd/proof.json",
"sha256": "37ae92e092007a9f58bf01d6b51bbaefac616d2fe86e7b4fb6bc19d076f9b877",
"checks": 23,
"result": {
"passed": true,
"checks": [
"SGF QA session reader",
"SGF QA session limited",
"SGF QA session foreign-unit",
"SGF QA session foreign-company",
"SGF reads canonical source with explicit dual rights",
"SGF sees actual1.5UN and posted75 from same native book",
"read-only canonical source identity and six lines",
"SGF response no-store",
"SGF server pagination boundary",
"SGF invalid page size refused",
"SGF protected scope parameter refused",
"SGF stale tab refused",
"general ledger view alone cannot read stock evidence",
"foreign SGF unit refused",
"foreign SGF company refused",
"missing binding is unavailable not zero",
"native scope mismatch refused",
"unapproved native role refused",
"SGF HTML has source facts and no financial command forms",
"SGF snapshot advertises only configured stock observer feature",
"revoked stock view refused on next request",
"source SQL role cannot write",
"source and SGF grants unchanged; no copied physical or ledger book"
],
"actual_sgf_http": true,
"physical_quantity_milli": 1500,
"posted_stock_minor": 7500,
"source_journals": 3,
"source_lines": 6,
"source_and_grants_unchanged": true,
"select_only_source": true,
"no_local_book_copy": true,
"visual_review": false
}
},
"sgf_metadata": {
"file": "private/stock-ledger-observer-0f9fe83534bd/proof-final.json",
"sha256": "4ab362a048b06417745b89e78f12dd624f6cd1f30672cc2be48c4bb336b5c9be",
"checks": 4,
"result": {
"passed": true,
"checks": [
"observer qualifies its reconciliation scope",
"changed native unit refused before presenting stock value",
"restored unit recovers and HTML states source conference limitation",
"all native metadata movements rates and journals exactly restored"
],
"synthetic_metadata_probe_restored": true,
"actual_http": true,
"not_full_source_revalidation": true
}
},
"demo": {
"file": "private/stock-ledger-cf1b85f9a040/demo-check.json",
"sha256": "c11fd3291c72ac11d664d486649a3613c895dc16e22f23255b8c94aa35803ba7",
"checks": 9,
"result": {
"passed": true,
"checks": 9,
"read_only_checks": true,
"initial_rates": 0,
"initial_journals": 0,
"initial_closures": 0,
"native": "http://127.0.0.1:8062/qa/stock",
"sgf": "http://127.0.0.1:8063/qa/stock-observer/reader?open=1",
"private_build": true,
"pinned_bundle_manifest": "8b3ad1c600b84c8526b2d9f453a1c5c4e174a69d6acc78ace2af4f52a25dd762",
"visual_review": false
}
},
"ui": {
"file": "docs/proofs/stock-ledger-ui-20261103.json",
"sha256": "35e82a12aa94d9f1d6874e95dbdd9be2ab92789a497c44caf329277bf6e41e9f",
"checks": 15,
"result": {
"passed": true,
"checks": 15,
"node_vm_and_react_render": true,
"actual_browser": false,
"no_automatic_command_retry": true,
"stale_receipt_responses_discarded": true,
"sgf_scoped_navigation": true
}
},
"menu": {
"file": "docs/proofs/stock-ledger-menu-final-20261103.json",
"sha256": "14e981998fcad4238b716ef5744c9d8db898b67f744794e7b92112a9201a9f91",
"checks": 5,
"result": {
"passed": true,
"checks": 5,
"react_static_render": true,
"actual_browser": false,
"existing_other_composition_route_preserved": true
}
}
},
"affected_legacy_regression": {
"file": "private/ledger-native-4ca15d915362/native-cycle-cases.json",
"sha256": "e79f0c9c4423abbe8fac86ee5fe38ced1a3ced3491fd8db4229aaf5e461a2344",
"checks": 23,
"passed": true
},
"sql_contracts": [
{
"file": "private/stock-ledger-b6b0e5d2fbc5/contract.json",
"sha256": "62071a80d1dfe5885e0bafbb3b4b762f64e1901f9b0f76ab8b9db256829574d8",
"passed": true,
"sql_contract_sha256": "26146adfd55f4f29a22c1177642a6e745ba3ed442e5e6d4a639164cc02fe90ee",
"predecessor_required": true,
"source_class_sha256": "a289ac2ad4a373628dabbc90c395002c22c4f86b51199f40c7aa82dbbe35cac3",
"read_only_checks": true
},
{
"file": "private/stock-ledger-255565a5f62d/contract.json",
"sha256": "62071a80d1dfe5885e0bafbb3b4b762f64e1901f9b0f76ab8b9db256829574d8",
"passed": true,
"sql_contract_sha256": "26146adfd55f4f29a22c1177642a6e745ba3ed442e5e6d4a639164cc02fe90ee",
"predecessor_required": true,
"source_class_sha256": "a289ac2ad4a373628dabbc90c395002c22c4f86b51199f40c7aa82dbbe35cac3",
"read_only_checks": true
},
{
"file": "private/stock-ledger-cf1b85f9a040/contract.json",
"sha256": "62071a80d1dfe5885e0bafbb3b4b762f64e1901f9b0f76ab8b9db256829574d8",
"passed": true,
"sql_contract_sha256": "26146adfd55f4f29a22c1177642a6e745ba3ed442e5e6d4a639164cc02fe90ee",
"predecessor_required": true,
"source_class_sha256": "a289ac2ad4a373628dabbc90c395002c22c4f86b51199f40c7aa82dbbe35cac3",
"read_only_checks": true
}
],
"sources": [
{
"file": "packages/general-ledger/bootstrap.php",
"sha256": "71451b27f4a12295b01fd5fce38de7013de7d84c07ed38e07a85da2d04adf670"
},
{
"file": "packages/general-ledger/src/PayableJournal.php",
"sha256": "7f776c1ef6641f79862c7ab898778591911c59dd3f2ae5e1130b041c8c4289f3"
},
{
"file": "packages/general-ledger/src/LedgerCycle.php",
"sha256": "5e6fdb1f5d47da16056043db75020e94172e9586a03a4b7e29c75e81b731fe14"
},
{
"file": "packages/general-ledger/src/StockSchema.php",
"sha256": "2589414179da70769fff90d3f858e7bc73888cdb3a0f4cd33722a76b7b32bce4"
},
{
"file": "packages/general-ledger/src/StockValuation.php",
"sha256": "a289ac2ad4a373628dabbc90c395002c22c4f86b51199f40c7aa82dbbe35cac3"
},
{
"file": "packages/general-ledger/src/StockComposition.php",
"sha256": "2fafb664613b9c5aef30bfbec21d93701049a1114c5e2027ebecf1fdd885ae06"
},
{
"file": "packages/general-ledger/src/StockWorkspace.php",
"sha256": "56a321e3ae796036fe1c6c8f94c15ab938649a87a5582deb43c5e93b5d5c7aa0"
},
{
"file": "packages/general-ledger/ui/stock.php",
"sha256": "2fc77b306711bd82dab6bd348f8fc7e434ffca5e663e2393589127a9146b48e8"
},
{
"file": "integrations/purchasing/StockValuationAdapter.php",
"sha256": "2942e3567bf879301db85d4a7d0af15d9206e369e0aece264ffcc28d5c43c644"
},
{
"file": "app/Modules/Accounting/StockValuationRead.php",
"sha256": "cf8618800c6e93d12314cb11009505a4da0384d8701fbaaceaf2cee6489d47a3"
},
{
"file": "resources/views/accounting/stock-valuation-read.blade.php",
"sha256": "86443c24ffd53c95b107a4e4b8597bf10577215aa8b5bcf9a87939b857afc280"
},
{
"file": "config/stock_ledger.php",
"sha256": "201a7d6cc603e4ee8d89648e7d4d4a5c841b25254f763ce36603633b205c09b4"
},
{
"file": "app/Modules/Identity/Services/IdentityWorkflow.php",
"sha256": "995b3d71e2fd7d4935235a29aeec2caca83fff3533b67224389900e080966822"
},
{
"file": "app/Shared/Context/ModuleNavigation.php",
"sha256": "b6d13a6e3ab5ab7c52591f9d0716a9369ae990409b96febf69419ab2a2966a24"
},
{
"file": "resources/js/AccountingMenuWorkspace.jsx",
"sha256": "034a189d4b649da8715773f0069788efdd2023ac9298f72ef2b92a4de38fd60a"
},
{
"file": "routes/web.php",
"sha256": "bd3e5d3db0fdbf4b00be87e39918254dbe22d77a76771f3b587ac94cc00d8795"
},
{
"file": "../compras/app/Services/ReceiptWorkflow.php",
"sha256": "a7325d4fdb09d1767d0d4fa3661bcf9b254e8506285080d6063bbed487bb522c"
},
{
"file": "../compras/app/Services/ReceiptStockMovement.php",
"sha256": "bd95d201563e4b028f7412eea77d5b157bbc464ddb5b34907bdf17b44d3c1637"
},
{
"file": "../compras/app/Services/WarehouseRequests.php",
"sha256": "729265408efa13d942f86f0c71370a50ac5286f1f00da3d34daa4eb627e476de"
},
{
"file": "../compras/app/Services/WarehouseFulfilment.php",
"sha256": "52130ff23382d10e7244b7b4211734772eb4d66518bb9002fc35dfb99f183c02"
},
{
"file": "../compras/app/Services/WarehouseReturns.php",
"sha256": "0e3ba1f1b9547a9fc21ad85191ff2378a2e5da7d95aaf0625c55d69a5d7bc0d3"
},
{
"file": "../compras/app/Services/WarehouseReturnMovement.php",
"sha256": "0a4fae10c24319b6f5bd030e99fa4281e337aaae5777e8287e608752e51bb5a3"
},
{
"file": "../compras/app/Services/StockIssueMovement.php",
"sha256": "61a649d26f4bf1e96becc3ff213bab0a029c47040d1368e99cc558bd98649de6"
}
],
"demo": {
"native": "http://127.0.0.1:8062/qa/stock",
"sgf": "http://127.0.0.1:8063/qa/stock-observer/reader?open=1",
"pinned_common_manifest_sha256": "8b3ad1c600b84c8526b2d9f453a1c5c4e174a69d6acc78ace2af4f52a25dd762",
"initial_rates": 0,
"initial_journals": 0,
"initial_closures": 0,
"physical_quantity_milli": 1500
},
"prior_proofs_preserved": [
{
"file": "docs/proofs/requisition-composition-20261103.json",
"sha256": "8e4e7a113274b16f9e1d6882ae4f0bf04eb3e9c0d580cf1743fdfe248458f67e"
},
{
"file": "docs/proofs/common-ledger-industrial-correction-20261103.json",
"sha256": "b8beee9278cd77e1a7dcfa7d47eae3e26952c51e656cec7bc34a835bb05cd478"
},
{
"file": "docs/proofs/financial-receipt-recovery-20261103.json",
"sha256": "240ea4da6579ef2366fa50f7703520979c9fb3e308379d6209c010d74b76aa0a"
},
{
"file": "docs/proofs/module-association-consolidation-summary-20261102.json",
"sha256": "8f693f39763ee21a22ebd3929d95ba1480f339eca18742fa53055c69eb5219ef"
},
{
"file": "docs/proofs/sgf-demo-8039-reconciliation.json",
"sha256": "948ecdb75b1bba9199634856fb2e9802069f3f2226e0e4894244542653fe8307"
}
],
"incomplete_or_superseded_qa_runs_preserved": [
"716e93985fae",
"f6f4a1639d23",
"3723aba6c497",
"d064fa825119",
"9dbef750c208",
"68efce228a56"
],
"limitations": [
"SGF observes the canonical native book through SELECT-only access; confirmations and full source revalidation execute in the native QA composition.",
"Observer reconciliation covers movement coverage and rate IDs, not independent validation of every current source dependency.",
"No hybrid posting of the same materials as direct/industrial cost; integration of already posted materials with these costs remains separate.",
"Selected fixed synthetic rate is not a real inventory valuation method or tax/accounting policy.",
"QA roles own their new databases; deployment owner/runtime separation and capacity are not validated.",
"No sustained load/throughput or visual review."
],
"preservation": {
"existing_demos_or_protected_six_records_written": false,
"blocked_cache_cleared": false,
"destination_migrations": false,
"real_or_public_rights_changed": false,
"purchasing_candidate_activated": false,
"publication": false,
"checkpoint": false
}
}
+657
View File
@@ -0,0 +1,657 @@
{
"id": "SGF-MODULE-FLOW-PREPARATION-v1",
"date": "2026-11-02",
"kind": "static_preparation_inventory",
"plan_sha256": "dcc2c168188622f73370adb675ef04433b1c175e792d1366a0666a2ad59dece6",
"sources": [
{
"id": "requisitions_delivery",
"repository": "sgf",
"path": "docs/SGF_REQUISITIONS_8039_DELIVERY.md",
"sha256": "9c0bc172b91314c54e67ac1f547ce64cf2ce97d2df285172ad5d99eee554b167",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_workflow",
"repository": "compras",
"path": "app/Services/ReceiptWorkflow.php",
"sha256": "e824dbc7fb0e6dbc748f905fc84fbd6c8bfaff814df0ddf25aa6077fa89dcc78",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_workflow",
"repository": "compras",
"path": "app/Services/StockWorkflow.php",
"sha256": "18ddaa075432b84c0b0ee5241ff56ab9de9aa8e8db4e6132693bc7fd904b3a58",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_controller",
"repository": "compras",
"path": "app/Http/Controllers/StockController.php",
"sha256": "79aa0f96da7b8290b23489bdaa5c45a4d9f122483dbc0b4132793f76e4f97d0b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_lots",
"repository": "compras",
"path": "app/Services/InventoryLots.php",
"sha256": "911a0ce691c58ec1f635260e875ff8d4acfa2a45eecbf74b59b254b3d9209b52",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_counts",
"repository": "compras",
"path": "app/Services/InventoryCounts.php",
"sha256": "0c1b0d5e795a15b4d762c47fcdbeb19f225aa933b4507938f310ff25026afa11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_dispositions",
"repository": "compras",
"path": "app/Services/InventoryDispositions.php",
"sha256": "35a05ed9d6e2cb96a38c1d9b8cb02631bae000a9ac9633dbb53025ceb611983c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reversals",
"repository": "compras",
"path": "app/Services/InventoryReversals.php",
"sha256": "d1712029d7cedda6fbc9b0562bc108ebf8fb235d7aeb2bca4158639d3fc9a2a2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "warehouse_reservations",
"repository": "compras",
"path": "app/Services/WarehouseReservations.php",
"sha256": "3120eaf6d9c8cedf3c991edcb41133f5107ca62736cea7e082ae4773755ffb54",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_menu",
"repository": "sgf",
"path": "resources/js/stock-menu.js",
"sha256": "776360166b0fdacad343853eb335044306f078acb8da1439715010b4713dc4ff",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "invoice_workflow",
"repository": "compras",
"path": "app/Services/InvoiceWorkflow.php",
"sha256": "b98538fe9ec175340a90c40de2fd2b56e0d67a3b3ce5f41deafb4c6fe9f337c1",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "supplier_adapter",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierPayables.php",
"sha256": "c17d44391cbd96941aa2dd2eac2cb167508faf6453c6a1e86333846df1ba18b9",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "payables",
"repository": "sgf",
"path": "packages/payables/src/Payables.php",
"sha256": "ed853f3eb48ebcf91f51a8fe9ed8e49b0e1bc30cce4852cc9394d51cff28c74d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlements",
"repository": "sgf",
"path": "packages/payables/src/SupplierSettlements.php",
"sha256": "1238c8abe950ca9c88746bb020a85392b7e42e8d7e3c8d86f0a5f79015f9ddfe",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlement_delivery",
"repository": "sgf",
"path": "docs/SUPPLIER_SETTLEMENT_DELIVERY.md",
"sha256": "46d9836e70b17a78acb2230f76122de38096384e55b4b2f5298aa9c73ab1fd20",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_workflow",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopWorkflow.php",
"sha256": "a09d7c14c7101c36a2539f346494584340493a56ca951c7b1e66418f43d80adb",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "direct_costs",
"repository": "sgf",
"path": "app/Modules/Workshop/DirectCosts.php",
"sha256": "51f70a18731ed6371442f8e6364c52b163f46bf9b58c86b407b73f39fffb164c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_costs",
"repository": "sgf",
"path": "app/Modules/Industry/IndustrialCosts.php",
"sha256": "55ad20b756d94d3d734886f8a6aae157a32916735f8af9fb6a3a5c69859beb45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_billing",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopBilling.php",
"sha256": "039fdfdab77a8856b070249e028894a740222199969cabd614bfaab0c9e5a2d2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_invoicing",
"repository": "sgf",
"path": "app/Modules/Services/ServiceInvoicing.php",
"sha256": "b5ac9898f2089fad7799b9e62e5ce5db6df7fd64643e8e7e3b52c6a0e2d142a8",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_receivables",
"repository": "sgf",
"path": "app/Modules/Services/ServiceReceivables.php",
"sha256": "725bc8773a78cfd05dd0a729d885a97c0eef43854ca7ab4210b4d5e80d5d54ec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "catalogue_accounting",
"repository": "sgf",
"path": "app/Modules/Services/CatalogueAccounting.php",
"sha256": "15e72188334a0c6e9b65050e9609ac1c50a924899a753d47557e3375017e5d1c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "accounting_menu",
"repository": "sgf",
"path": "docs/ACCOUNTING_MENU_DELIVERY.md",
"sha256": "d2c72d3e1ba5256720a00520ea18fe5e2b9664517d7c8639e64dfbad00aebb40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_core",
"repository": "sgf",
"path": "packages/general-ledger/src/PayableJournal.php",
"sha256": "7f776c1ef6641f79862c7ab898778591911c59dd3f2ae5e1130b041c8c4289f3",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_adapter",
"repository": "sgf",
"path": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "a87d2ea373bc61bb139aa29f2a354b9813bbb2d6229a389f8d37fd8e9890edec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_DELIVERY.md",
"sha256": "e8aea14f18da04a407ae2a225c5537f133394b830fb059a233ad4367d976007f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_core",
"repository": "sgf",
"path": "packages/general-ledger/src/LedgerCycle.php",
"sha256": "5e6fdb1f5d47da16056043db75020e94172e9586a03a4b7e29c75e81b731fe14",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_native_adapter",
"repository": "compras",
"path": "app/Services/GeneralLedger.php",
"sha256": "fc80b20ad0ab2dac1c8df4b535349d05b416f1c5f2eec3e7718eda51f6626485",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_COMPLETE_CYCLE_DELIVERY.md",
"sha256": "424a6d9de6f3a02c4ff691df7e045cbf1fd42838bf20c03cca61dcc79c390b2d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_source",
"repository": "sgf",
"path": "app/Modules/Accounting/IndustrialLedgerSource.php",
"sha256": "2479bfd33182fdd918b14748ca9e00e8c789a127bf1746651c8f8f7d53205024",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_workspace",
"repository": "sgf",
"path": "resources/views/accounting/industrial-ledger.blade.php",
"sha256": "989ad6272fd14b681ca0000196dada276de0904f5ae69e4338f65e7e8cc5af45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_DELIVERY.md",
"sha256": "70c03e5093b349b81aef3132223dfcca440037ab2ab64ae48be28ec72f4c356f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_correction_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_CORRECTION_DELIVERY.md",
"sha256": "a9040aa59528af4acf5ac211d24d43624ee67ec03715ff128bceb56a8cad671b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_writer",
"repository": "sgf",
"path": "packages/inventory-write/src/ReceiptMovementWriter.php",
"sha256": "279cec2ec915e27cf431355fca1e36f21cb3c15a77d02834723a41ec7a6f8f40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_movement_adapter",
"repository": "compras",
"path": "app/Services/ReceiptStockMovement.php",
"sha256": "bd95d201563e4b028f7412eea77d5b157bbc464ddb5b34907bdf17b44d3c1637",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reader",
"repository": "sgf",
"path": "packages/inventory-read/src/InventoryReader.php",
"sha256": "9b0591600da07719d655324ccf0b740f06de07db2806540684c9730d048e44b6",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_read_adapter",
"repository": "sgf",
"path": "app/Modules/Inventory/StockReadController.php",
"sha256": "c6131733974b6902c556593709729356769d11aea9eada3fc5397246102068f4",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_stock_bridge",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopStock.php",
"sha256": "6460a4235fe7b0b4602b0aeb63a47f1a97e367e93baba6aa774be5fa0dac4e6e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_stock_controller",
"repository": "sgf",
"path": "app/Modules/Workshop/Http/WorkshopStockController.php",
"sha256": "06c9f85f926b4268636887f50458cd19fc1a467ae636dea94caba586fb463c0e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_recovery_workspace",
"repository": "sgf",
"path": "resources/views/accounting/receipt-recovery.blade.php",
"sha256": "aee62d5b35f044cf10f759b098647b2fbe4d3fb34c68a065fd1f274c1d0aa7ee",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "requisition_core",
"repository": "compras",
"path": "packages/purchasing/src/InternalRequisitions.php",
"sha256": "5acd82015a4f4b24c5f956139e7d9ec8822e1408e8edd6a2c21802673d647d94",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "requisition_qa_composition",
"repository": "sgf",
"path": "app/Modules/Purchasing/InternalRequisitionQa.php",
"sha256": "3195b51cca7546e050b62791407bdbfd130ddc2f2eabc06feed5c9bbd7f76303",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_core",
"repository": "sgf",
"path": "packages/general-ledger/src/StockValuation.php",
"sha256": "6fe704a737e8fd6684a60848b7956db345ca75fd18f517ac69c6f4dbee52e1df",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_observer",
"repository": "sgf",
"path": "app/Modules/Accounting/StockValuationRead.php",
"sha256": "cf8618800c6e93d12314cb11009505a4da0384d8701fbaaceaf2cee6489d47a3",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_schema",
"repository": "sgf",
"path": "packages/general-ledger/src/StockSchema.php",
"sha256": "2589414179da70769fff90d3f858e7bc73888cdb3a0f4cd33722a76b7b32bce4",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_composition",
"repository": "sgf",
"path": "packages/general-ledger/src/StockComposition.php",
"sha256": "2fafb664613b9c5aef30bfbec21d93701049a1114c5e2027ebecf1fdd885ae06",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_adapter",
"repository": "sgf",
"path": "integrations/purchasing/StockValuationAdapter.php",
"sha256": "2942e3567bf879301db85d4a7d0af15d9206e369e0aece264ffcc28d5c43c644",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_runtime",
"repository": "sgf",
"path": "app/Modules/Purchasing/ReceiptRuntime.php",
"sha256": "9b426476b2805094fb317cc753385ef43882fb4964883e880eac287eed89d9e0",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/ReceiptController.php",
"sha256": "2c946b782a62e81b3ec637e2f72590ed6a6c0774f04a8082171f9c898d37c2db",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_screen",
"repository": "sgf",
"path": "resources/views/receipt-workspace.blade.php",
"sha256": "75a4d917b300dc9f9c89a8feb90e4ba39829177f946a28fc613612ab4b91a308",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_order_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/OrderController.php",
"sha256": "4ebab47ecb008f3c31f970f399e8c19df7e860d7b6482227a800fb61dd28dd48",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "native_order_workflow",
"repository": "compras",
"path": "app/Services/PurchaseWorkflow.php",
"sha256": "f01bbda4b8f5b65b0c9bd508266f7b3868c9b881302b7e4c2702684dfae756cf",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_order_screen",
"repository": "sgf",
"path": "resources/views/order-workspace.blade.php",
"sha256": "a33e98fb469b036df3d95c73001bf1e842e414bd0c93ded2a4d2d72d7c52565b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_sourcing_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/SourcingController.php",
"sha256": "7b5ed82ee1b336b7a5f8ccf8a989d52ca4ccdcf321d0c92fd3385689151489f3",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_sourcing_screen",
"repository": "sgf",
"path": "resources/views/sourcing-workspace.blade.php",
"sha256": "32e67b9145109099de0aea2198d9faca4e97155e1132881ff9c4f522741c763f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "native_quotation_controller",
"repository": "compras",
"path": "app/Http/Controllers/QuotationController.php",
"sha256": "23bc3af0fd4b67abb2f497742c06dff0208f3abcec1dd2c3338c15ff2abd3924",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "native_proposal_comparison",
"repository": "compras",
"path": "app/Services/ProposalComparison.php",
"sha256": "f34e7f736a18ae9e21bba324ebdf738c02cdcc6b4841367a13a5868631cd5dfa",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierController.php",
"sha256": "4bfff0204e67f21a6ddd785d64e7c91bd63bf65742add42fc3aa7f943ab5a6e4",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_access",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierAccess.php",
"sha256": "b823189d10e8ecf9a55e9021bffce023a7e6d4e2b0db2710c32910591968d814",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_screen",
"repository": "sgf",
"path": "resources/views/supplier-workspace.blade.php",
"sha256": "010afb19afd35b90d6b7ffe048f77b97c85b2329d7253cb9c1765e869ca1ec3b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_request_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/RequestController.php",
"sha256": "01033a50d6f1dfbdea34357e6853b978e066f11a1267fcd652606f67930d7009",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_request_access",
"repository": "sgf",
"path": "app/Modules/Purchasing/RequisitionAccess.php",
"sha256": "a955228df0f793d3b90f37e5ca890c53af88f6406140e98fe9a614c3821980cc",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_request_screen",
"repository": "sgf",
"path": "resources/views/request-workspace.blade.php",
"sha256": "568f6eb0b2be3ae87728a75d6aacb6199a031e7bd82462ae26398a362822fc9c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_invoice_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/InvoiceController.php",
"sha256": "6812feb996507d204affd2a61945836cdc2db5fb8a21c585b899ec49bed142e6",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_invoice_screen",
"repository": "sgf",
"path": "resources/views/supplier-invoice-workspace.blade.php",
"sha256": "0c6b237c4dcb24276cbfde06b4e8ffe0e28dcb894cd485b040aa73d78e9db7b5",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_obligation_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/ObligationController.php",
"sha256": "347e629306d6c1f4873afac547d13fae8ade7b268906d1312a64e7eb6998e701",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_obligation_screen",
"repository": "sgf",
"path": "resources/views/supplier-obligation-workspace.blade.php",
"sha256": "b0bc8a8aec1fbd5a6d2acec1243631ca779762717c1e080dae5f13c0ad4453c7",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_purchasing_workspace",
"repository": "sgf",
"path": "app/Modules/Purchasing/WorkspaceNavigation.php",
"sha256": "2e4fa17a60b718eda505b619859f9743517716eba573a382c54a95377254ccc8",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_purchasing_navigation",
"repository": "sgf",
"path": "resources/views/partials/purchasing-navigation.blade.php",
"sha256": "95b3941ef72eb8df59624320a622eb96e5fdd2e7b0e5365c0332d06952ebbd50",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_picker",
"repository": "sgf",
"path": "public/supplier-picker-model.mjs",
"sha256": "7eda0e980a0d7c88a8fbf6ea446de2d169df22138a9fb6f62ecfa50b10506bde",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_search_ui",
"repository": "sgf",
"path": "public/sourcing-workspace.mjs",
"sha256": "9eb38e43626d96d71c0cbaf6c00700ab9fdaf06dd82d8405ba04b13cd2f86548",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_dossier_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/DossierController.php",
"sha256": "c44d04e08a1496b9c2262131a4909430c6e7a63264f3bb392df38bb47bae575e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_dossier_screen",
"repository": "sgf",
"path": "resources/views/purchasing-dossier.blade.php",
"sha256": "8fc5a0f4d7b93e83064952d2ae57b1bf43f77744b2b2b070fa9185698762c741",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_dossier_ui",
"repository": "sgf",
"path": "public/purchasing-dossier.mjs",
"sha256": "4d0d5eb4887630107bbc2fed8567d461dfd9c319199764d7e6612b10004fa5a1",
"meaning": "source_present_only_not_operational_proof"
}
],
"stages": [
{
"id": "requisition_order",
"owner": "purchasing",
"effect": "approved_procurement_origin",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "New SGF requests now start as drafts, submit/reserve once, receive distinct native approval and continue with the same request ID to sourcing, award, order/commitment and receipt in demo8068. Host budget entries stay unchanged. Supplier registry/review remains delivered in QA. Conversion of legacy host-reserved ir_requests requires its own responsibility/recovery protocol and is not delivered. Technical catalogues, formal regimes, later corrections and general deployment remain pending. Superseding the earlier separate-fixture limitation for Purchasing: demo8072 now starts before the first main request and completes request, sourcing, award, order, receipt, invoice and explicit payable recognition in one native book, with shared permission-aware navigation. Supplier registry and geography are mounted in the same host. This does not unify all six ERP modules or validate deployment, payments or accounting of this origin. The earlier100-supplier selection cap is resolved in demo8073: literal name/NUIT search and server pages25/100, explicit selection, stale-response protection and supplier fingerprint revalidation before a new quotation. Existing rights and native rules are reused; no deployment or sustained-load capacity conclusion. A GET-only dossier now correlates the actual request through independently authorised downstream evidence in demo8074, with independent25-row pages and filtered history. Read proof reuses the completed canonical regression book without repeating financial commands; all142 tables and sequences remain unchanged. This is not a universal task queue, readiness decision or deployment validation."
},
{
"id": "accepted_receipt",
"owner": "purchasing",
"effect": "accepted_physical_receipt",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "SGF source-to-receipt selected path is delivered in QA: three proposals, six evaluations, one approved award, one order/100MZN commitment and one receipt/physical movement, with canonical history and original workflows. Demo8066 starts before these individual decisions;8064/8065 preserved. General installation, catalogue search, sustained load and deployment remain pending; SGF internal requisition handoff remains separate."
},
{
"id": "physical_stock",
"owner": "stock",
"effect": "physical_movement_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Common physical readers/writers and selected stock valuation are delivered in isolated QA: receipt2UN/100, issue1UN/50, return0.5UN/25, net1.5UN/75. Same canonical physical/valuation book, with SELECT-only SGF observation and explicit rate/review/dependencies. Operational bindings/installation, real valuation method and hybrid integration with already posted direct/industrial materials remain pending."
},
{
"id": "supplier_invoice",
"owner": "purchasing",
"effect": "verified_supplier_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "SGF now registers pending supplier invoices and performs distinct exact matching through the original pinned workflow after actual SGF order/receipt. Two partial documents40+60 consume the original100MZN commitment once; conflicting pending70 is preserved and refused. Demo8070 starts before main issuance/receipt/invoice. The earlier common-payable11600MZN scenario retains its own proof; these new invoices are not automatically recognised as a payable. Correction/credit notes, binary attachments, real fiscal policy and general deployment remain separate. Superseding the earlier separate-fixture limitation for Purchasing: demo8072 now starts before the first main request and completes request, sourcing, award, order, receipt, invoice and explicit payable recognition in one native book, with shared permission-aware navigation. Supplier registry and geography are mounted in the same host. This does not unify all six ERP modules or validate deployment, payments or accounting of this origin."
},
{
"id": "supplier_payable",
"owner": "finance",
"effect": "supplier_obligation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Explicit SGF invoice preparation and distinct recognition now use the same original native supplier-payable adapter and canonical book in demo8071. One100MZN principal, bounded lists/evidence, current-source replay checks and atomic SGF provenance are proven in new QA fixtures. No automatic recognition, duplicate host debt, payment, accounting or imported-history cutover. Unknown maturity remains visible. Combining all earlier demos in one installation, correction/attachments, visual review, sustained load and general deployment remain pending. Superseding the earlier separate-fixture limitation for Purchasing: demo8072 now starts before the first main request and completes request, sourcing, award, order, receipt, invoice and explicit payable recognition in one native book, with shared permission-aware navigation. Supplier registry and geography are mounted in the same host. This does not unify all six ERP modules or validate deployment, payments or accounting of this origin."
},
{
"id": "supplier_settlement",
"owner": "finance",
"effect": "confirmed_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA confirmation/allocation/reversal and scoped receipt lookup exist; no bank execution, real reconciliation or live historical SGF cutover is delivered."
},
{
"id": "workshop_execution",
"owner": "workshop",
"effect": "verified_work_record",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Verified observations exist; no automatic physical stock movement."
},
{
"id": "workshop_stock_consumption",
"owner": "stock",
"effect": "company_material_consumption_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA issue, existing delivery link, partial allocations, returns and proposal withdrawal/rejection are implemented with explicit review and no duplicate movement. Native warehouse return and SGF observation have separate proof. Operational item/warehouse mappings and installed composition remain pending."
},
{
"id": "verified_cost",
"owner": "finance",
"effect": "validated_cost_version",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Current costs are synthetic; physical movement linkage is future and absence of rate stays visible."
},
{
"id": "sales_draft",
"owner": "commercial",
"effect": "commercial_draft_from_unique_origins",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Draft integration exists; cost is not sale price and draft does not decrement stock."
},
{
"id": "sales_invoice",
"owner": "commercial",
"effect": "issued_sales_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Actual test issuance and QA accounting recognition are proved. Real fiscal issuance/compliance remains guarded."
},
{
"id": "customer_receivable",
"owner": "finance",
"effect": "customer_receipt_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA opening, confirmed receipts/allocations400+600, reversal400 and accounting integration are proved. Real money, fiscal receipts and bank reconciliation are excluded."
},
{
"id": "general_ledger",
"owner": "accounting",
"effect": "balanced_journal_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "One QA writer covers supplier, sales/receivables, direct/industrial costs and their approved corrections; joint11 journals/23 lines gross8725 remains its own proof. A separate authorised physical-stock book adds entry100/issue50/return25, three journals/six lines gross175, stock75 and period close. No duplicated material cost: hybrid direct/industrial-stock composition remains excluded. SGF observes the canonical stock book; stock confirmations run in its native QA composition. Real chart/tax/valuation/payroll policy, further corrections, reopening, operational cutover and deployment remain pending."
}
],
"checks": {
"source_paths_and_hashes": true,
"single_owner_per_stage": true,
"mandatory_dependency_graph_acyclic": true,
"planned_consumers_explicit": true
},
"limitations": [
"Source existence is not execution, parity, acceptance or deployment evidence.",
"Dependencies represent the selected synthetic path, not universal product eligibility rules.",
"No stage transition engine, inventory adapter or journal engine implemented by this inventory."
],
"preservation": {
"database_connections": 0,
"source_execution": false,
"application_routes_changed": false,
"rights_changed": false,
"protected_six_records_untouched": true,
"blocked_cache_untouched": true,
"demos_changed": false,
"purchasing_activated": false,
"publication": false,
"checkpoint": false
},
"visual_review_pending": true,
"deployment_capacity_validated": false
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,163 @@
{
"increment": "FINANCIAL-RECEIPT-RECOVERY-v1",
"date": "2026-11-03T06:55:47.251Z",
"functional_code": true,
"checks": 43,
"private_evidence": [
{
"file": "private/ledger-6070063f42f2/financial-receipt-cases.json",
"sha256": "c6a8d956d82d53a1140d596b4768b57b29df3bb618a865cb0641c61cf7af62d7",
"result": {
"passed": true,
"checks": 13,
"same_uuid_domains_separate": true,
"read_only": {
"isolation": "repeatable read",
"read_only": "on"
},
"writer_locks": 0,
"no_payments_or_effects_created": true,
"synthetic_receipt_fixture_explicit": true,
"source_rights_unchanged": true
}
},
{
"file": "private/ledger-6070063f42f2/financial-receipt-core.json",
"sha256": "79dff28c98fdd1358eea696ab48cc1bb0831d2f790e1a3e83af9f76bb7280a96",
"result": {
"passed": true,
"checks": 6,
"foreign_tenant_company_unit_absent": true,
"missing_read_authorizer_refused": true,
"domain_whitelist": true,
"read_only": true
}
},
{
"file": "private/ledger-6070063f42f2/financial-receipt-http.json",
"sha256": "c769649b84bd0950c515fbc01a67ce09621afe49cd885904e03cb5433a6fdbae",
"result": {
"passed": true,
"checks": 19,
"no_business_commands": true,
"actual_http": true,
"visual_review": false
}
},
{
"file": "private/ledger-6070063f42f2/financial-receipt-form.json",
"sha256": "85b23ff21361c239566cd2129f3570d5fee9777c843e8b415c2004d8acbc3c3d",
"result": {
"passed": true,
"checks": 5,
"rendered_scripts_compile": true,
"mock_get_only": true,
"no_browser": true
}
}
],
"previous_manifests": [
{
"file": "docs/proofs/ledger-receipt-recovery-20261103.json",
"sha256": "98ee6944953859f90a77f81697a66d1573928e9b1b6d78e1b58bb383776f955f"
},
{
"file": "docs/proofs/common-ledger-industrial-correction-20261103.json",
"sha256": "b8beee9278cd77e1a7dcfa7d47eae3e26952c51e656cec7bc34a835bb05cd478"
}
],
"previous_private_artifacts_verified": 19,
"frozen_packages_bytes_preserved": true,
"sources": [
{
"file": "packages/payables/src/ReceiptReader.php",
"sha256": "ed4e153d539ad660f9b87c44d70b14166dbb7262bc9aa5d81b71559a8c80999e"
},
{
"file": "packages/payables/src/Payables.php",
"sha256": "ed853f3eb48ebcf91f51a8fe9ed8e49b0e1bc30cce4852cc9394d51cff28c74d"
},
{
"file": "packages/payables/src/SupplierSettlements.php",
"sha256": "1238c8abe950ca9c88746bb020a85392b7e42e8d7e3c8d86f0a5f79015f9ddfe"
},
{
"file": "packages/payables/bootstrap.php",
"sha256": "b90f0947c7c27fe7464b17ef9269f71c8ab9294385029d9e6d1d04f4a3a1930b"
},
{
"file": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "a87d2ea373bc61bb139aa29f2a354b9813bbb2d6229a389f8d37fd8e9890edec"
},
{
"file": "app/Modules/Accounting/GeneralLedgerController.php",
"sha256": "8c83538a5df4625bb3a15c81e3bf618d12187eca77da5f6e73dd1b4b781c64ce"
},
{
"file": "routes/web.php",
"sha256": "816e3f7692f8a4365832b1ccafcefbf470d6bb32de2f04c9f5eb595740891b9f"
},
{
"file": "resources/views/accounting/receipt-recovery.blade.php",
"sha256": "0c00fd13ab346e5874cf8fe492b058c823fe6339eef2632ef5a128d0feca6221"
},
{
"file": "scripts/ledger-composition-proof.php",
"sha256": "b00267b3a058739475a3e0f9152e3a6ca662d7d63f76fa2e8e1c14b668997646"
},
{
"file": "scripts/financial-receipt-proof.php",
"sha256": "8a2e011f6af966fa2a9dcd8b9754c4ee42d0bc4dc5a2fff19b7858857603a897"
},
{
"file": "scripts/financial-receipt-core.php",
"sha256": "419dc74aea3f7f3ce5e965e4c7a659b5caa036368f208438a289113bcc55f747"
},
{
"file": "scripts/financial-receipt-http.mjs",
"sha256": "f516baea07b479de87f63415f5e9f0f91906d07e1785d9b89d79153116a9ecd3"
},
{
"file": "scripts/financial-receipt-form.mjs",
"sha256": "478c543f647e3fad9b08c5ab83427abe0b74f28fadbc1bba6283356a96b69edc"
},
{
"file": "scripts/summarize-financial-receipt.mjs",
"sha256": "bcc03d4f99a86b61bc9b6d61a00b327e26240cf727192bd18ee474d9e1d7b0ae"
},
{
"file": "docs/FINANCIAL_RECEIPT_RECOVERY_DELIVERY.md",
"sha256": "3ace4eb8ba99fb2e9dbe34e839ebc25b1d464ac684e1516b40527d80e967accd"
},
{
"file": "docs/GENERAL_LEDGER_RECEIPT_RECOVERY_DELIVERY.md",
"sha256": "0b970eb526587f57d173eadded1d22cffc2c49cc2267c5f57ca0e7437889c92a"
},
{
"file": "README.md",
"sha256": "34656e4f443202977d5d341e1321d9b70ba6429258b08d2551b9d48c9573072c"
}
],
"fixture": {
"actual_supplier_recognition": true,
"settlement_receipt_infrastructure_only": true,
"settlement_fixture_represents_no_business_effect": true,
"payments": 0
},
"preservation": {
"six_records_untouched": true,
"blocked_cache_untouched": true,
"prior_demos_not_reset": true,
"no_real_grants": true,
"no_migrations": true,
"no_purchasing_activation": true,
"no_publication": true,
"no_checkpoint": true
},
"limits": {
"visual_review_pending": true,
"sustained_load_validated": false,
"deployment_capacity_validated": false,
"no_sgc_installation": true
}
}
@@ -0,0 +1,380 @@
{
"date": "2026-11-03T12:20:31.325Z",
"increment": "SGF-GEOGRAPHY-SEGMENTATION-QA-v1",
"passed": true,
"functional_code": true,
"checks": 83,
"tests": {
"integration": {
"file": "private/receipt-composition-24b388fdd84f/geography-result.json",
"sha256": "a56ce5071a7edcfa7b2a14b0d2e930b8caceecd2dd4ced5032c3cd2cf1e2d30e",
"checks": 41,
"result": {
"passed": true,
"checks": [
"all source rows imported without business locations",
"province reference page is accessible",
"cascade follows explicit parent",
"invalid page is rejected",
"stale general reference context is refused",
"server catalogue pages25 are disjoint",
"alphanumeric territorial code survives import and search",
"common location screen served",
"foreign company ID refused",
"another active unit cannot be inferred",
"read permission does not grant editing",
"source ambiguities cannot be assigned",
"preview is read only and presents the exact source version",
"tampered preview refused",
"history failure aborts confirmation",
"history failure rolls back location and receipt",
"same preview recovers after failure removal",
"replay preserves one location and history entry",
"same key cannot change territory",
"independent editors commit once and refuse stale concurrent version",
"editing right revalidated at confirmation",
"unit uses the shared location mechanism",
"changed entity invalidates geographic preview",
"changed active reference requires renewed conference",
"new context generation invalidates general company preview",
"pending unassociated client cannot be reached",
"associated client receives explicitly selected location",
"client consultation does not imply editing",
"client segmentation applies explicit territorial filter",
"absent filter code does not fabricate matches",
"supplier location reuses original administrative authority",
"warehouse cannot inspect supplier location",
"foreign native supplier is inaccessible",
"supplier segmentation rechecks native visibility",
"unmapped unit cannot reuse supplier location",
"explicit removal assigns no replacement territory",
"paged history preserves before after author reason and date",
"geo_location_history refuses deletion",
"geo_territories refuses deletion",
"pending client and module associations are unchanged",
"native supplier addresses review and financial evidence are unchanged"
],
"concurrent_edit_statuses": [
201,
409
],
"catalogue_rows": 20407,
"native_before": "3ee79030cbad7ec962eb87f8a62e0a53a66f7d485486fcff89073c564a249cd4",
"native_after": "3ee79030cbad7ec962eb87f8a62e0a53a66f7d485486fcff89073c564a249cd4",
"purpose": "segmentation_only",
"pending_client_unchanged": true,
"module_associations_unchanged": true,
"visual_review": false,
"deployment_capacity_validated": false
}
},
"pagination": {
"file": "private/receipt-composition-24b388fdd84f/geography-pagination.json",
"sha256": "a61b31f9ae002a85b3479f6bced60fae9bb9dc2345f6b0a805143f0d9b49646c",
"checks": 5,
"result": {
"passed": true,
"checks": [
"segmentation first page contains25 authorised locations",
"segmentation cursor reaches final two locations",
"cursor pages contain no duplicate or omitted visible locations",
"prepared metadata cannot bypass an absent client module association",
"invalid segmentation cursor rejected"
],
"prepared_reader_fixtures": 26,
"actual_command_checks_reused": 41,
"pages": [
25,
2
],
"unassociated_client_hidden": true,
"protected_pending_client_location_fixture_removed": true,
"database_scope": "new QA fixture only",
"visual_review": false
}
},
"guards": {
"file": "private/receipt-composition-24b388fdd84f/geography-guards.json",
"sha256": "3e886415b8c126dcd633c3662cdea2475bd6d1094df10bee8cfd640925179b37",
"checks": 12,
"result": {
"passed": true,
"checks": [
"disabled catalogue refuses before SQL",
"disabled preview refuses before validation and SQL",
"disabled segmentation refuses before SQL",
"production refuses synthetic geography before SQL",
"correct module owner: geography/company/1",
"correct module owner: geography/unit/1",
"correct module owner: api/geography/catalogue",
"correct module owner: geography/client/1",
"correct module owner: api/geography/segments/client",
"correct module owner: geography/supplier/1",
"correct module owner: api/geography/entities/supplier/1/confirm",
"correct module owner: api/geography/segments/supplier"
],
"database_queries": 0,
"public_rights_changed": false
}
},
"demonstration": {
"file": "private/receipt-composition-ce2f27544d34/geography-demo-smoke.json",
"sha256": "ec471f6786901e502912fbdd3ff61ef824509dff4b63d4972a1ab8d4a025f100",
"checks": 14,
"result": {
"passed": true,
"checks": [
"demo begins without locations or geographic decisions",
"company location capability matches actor",
"company location capability matches issuer",
"company location capability matches validator",
"shared geography screen is live",
"live reference exposes11 source provinces",
"read-only preview carries country and exact source version",
"supplier record advertises shared geographic selector",
"synthetic associated client can open selector without an initial location",
"segmentation demo begins with no assigned client locations",
"pending synthetic client stays outside the selected module",
"client reaches the same live selector",
"served selector script matches delivered source",
"smoke and preview persist no geographic location history or command"
],
"before": "5ae1625b488b3935122d8dd627fe575b388a5aa360378fa4407aad08baaed1e2",
"after": "5ae1625b488b3935122d8dd627fe575b388a5aa360378fa4407aad08baaed1e2",
"visual_review": false,
"locations": 0
}
},
"assets": {
"file": "private/receipt-composition-ce2f27544d34/geography-demo-assets.json",
"sha256": "23478a5b235317e18b3be20d9f8098a0168b854d9c84484646881db130b7be67",
"checks": 3,
"result": {
"passed": true,
"checks": [
"private frontend build succeeds",
"served built assets match private build",
"geography module is served through private static whitelist"
],
"assets": [
"assets/app-Bas0virr.js",
"assets/app-BLSNCrO7.css"
],
"visual_review": false
}
},
"links": {
"file": "docs/proofs/geography-links-20261103.json",
"sha256": "ed63b4ffcce13e9417ef9c37f4d139f1316f82a12d728f50ce12b1d2b4191b99",
"checks": 8,
"result": {
"passed": true,
"checks": 8,
"names": [
"company opens the shared selector",
"unit opens the shared selector",
"client opens the shared selector",
"disabled composition hides location link",
"absent capability hides location link",
"unsaved client has no location target",
"unrecognised entity cannot generate a target",
"noninteger record ID is refused"
],
"source": "resources/js/GeographyLink.jsx",
"sha256": "1bad1cfbd2568cce7e9ee21e306f10465194f579a152b48187c6f6133533493a",
"visual_review": false
}
}
},
"sources": [
{
"file": "app/Shared/Geography/Cartography.php",
"sha256": "1153c13031ba827ec177c74b624dbeb555e06f731409d5baea6b7b702616c042"
},
{
"file": "app/Shared/Geography/Catalogue.php",
"sha256": "2cc6a86832ff0c7ec844818feb13ca25a245fa2f14b434a7644fd653e24f8d44"
},
{
"file": "app/Shared/Geography/Locations.php",
"sha256": "1a4214814fc881275a0bc240fcb17a79b75f878fb93abbd9c0664e11390f36a9"
},
{
"file": "app/Shared/Geography/Segments.php",
"sha256": "612d83947ed63fc32c16f6f472d7103e2e6a7f70ed8da2db3413f3c8bf6dbfcf"
},
{
"file": "app/Shared/Geography/GeographyController.php",
"sha256": "62115337f18810544efbe3cbea2ac3f2859c8136a8fa70cb771485fb4f8ab098"
},
{
"file": "config/geography.php",
"sha256": "ba8ec11d5af512ac36bb795aaa199611e3d5015823a89ab9334b68361afb477f"
},
{
"file": "routes/web.php",
"sha256": "17cd4656e25c9e2d16292fc57df8bd28bbd8f3a303437f59c6b9d9e1ec8a0e21"
},
{
"file": "app/Shared/Context/ModuleNavigation.php",
"sha256": "313927be05453b1c7c448b3567a6d8ff30dd46507aea5d2533448295d5d93bc1"
},
{
"file": "app/Modules/Identity/Services/IdentityWorkflow.php",
"sha256": "5010b609cf0cf675893cd2583edf3ddba32ad5b2d1c5b418771b0930ba06d24d"
},
{
"file": "app/Modules/Purchasing/SupplierController.php",
"sha256": "4bfff0204e67f21a6ddd785d64e7c91bd63bf65742add42fc3aa7f943ab5a6e4"
},
{
"file": "resources/js/GeographyLink.jsx",
"sha256": "1bad1cfbd2568cce7e9ee21e306f10465194f579a152b48187c6f6133533493a"
},
{
"file": "resources/js/app.jsx",
"sha256": "48ebe87adaace5a91db105ae21088990d3636209bd3854545bad0e3a5a6d7c79"
},
{
"file": "resources/js/ServicesWorkspace.jsx",
"sha256": "c170b195ccd78aa74f283a91b0b4f4cd93aea4677e3aaefe0b50af46f7e31669"
},
{
"file": "resources/views/geography-workspace.blade.php",
"sha256": "2454e9ee673ebaebc3081a007ede945d7867d055ce534f92ee0bcdf2bd03f5c1"
},
{
"file": "public/geography-workspace.mjs",
"sha256": "d97625c11e7adc76b9436bf743c1f20b145fd15731b320e890fb629bf257fc48"
},
{
"file": "public/supplier-workspace.mjs",
"sha256": "4c52a469e622e40274a1a151fa110ce4a71e91e621f36da102f54b034911f1ce"
},
{
"file": "scripts/geography-host-setup.php",
"sha256": "501b89203a558e775d9ffeefd5cb9014f94badb26a06420713e4cad38adc317e"
},
{
"file": "scripts/geography-composition-proof.php",
"sha256": "849e27686eb7877321ddbe3c3cd2dfaf16c2dba5d26140ddc3d46522a6badb20"
},
{
"file": "scripts/geography-proof-body.php",
"sha256": "b4404add269d7ee5c9591f43454c8b84b9c556fea3764eb63c3e3ea10931d8ba"
},
{
"file": "scripts/geography-pagination-proof.php",
"sha256": "f832ed3d1c4d30abf0021dd265419237abee221cb6fd3a070c169b580080675d"
},
{
"file": "scripts/geography-pagination-body.php",
"sha256": "024d180faf846f329b04173a98df838242c08d2c9d59cb961b9baa9011e1b19c"
},
{
"file": "scripts/geography-guard-proof.php",
"sha256": "4a356666c08c38c57eb09d65bdc98d333edcf08e76f23731871d9b4da61146cf"
},
{
"file": "scripts/geography-links-check.mjs",
"sha256": "947e8ca7499c0d585d1872b2dde0e45e87d5db50d7df4a166967039de4d0de85"
},
{
"file": "scripts/geography-demo-smoke.php",
"sha256": "b333717fb604f94d7b70d1ff5447c39aa992d15ee944874b5fb915b675e42505"
},
{
"file": "scripts/geography-demo-assets.mjs",
"sha256": "27daf7a712c0edc6b3cf0d15bf4753ba19f4acfaadeeb06e491da27a11802cba"
},
{
"file": "scripts/receipt-composition-run.mjs",
"sha256": "5a54572c5e786e606aeaa18d9c6f0c1d457cf91289584573c69229dfcb954052"
},
{
"file": "scripts/receipt-composition-http.php",
"sha256": "87e66cfcb52b13b92b37cb4135940a2b2ece9ad874a49a0a596de5515c47733a"
},
{
"file": "scripts/receipt-composition-extra.mjs",
"sha256": "3acec90cc49f875d8a7fb72e33184aefc4b01a68120f03d5ed4b14c96263fa7a"
}
],
"reference": {
"source_sha256": "70996d9a9133785a848de90bedb4bf685e24d8f823cd153c0adc43eac642a292",
"prepared_sha256": "5ed851666f417afb53a7e804a32d703f5432bc6a2d4532e333ebedef5910c98a",
"rows": 20407,
"source_checks_reused": 16,
"source_workbook_modified": false
},
"pinned_native_manifests": {
"bundle": "7709a3d447d54c17d2fb4be4f9a0f70455c4a38c34e4bb8c643f6b5169071556",
"economic": "8b2d3aa61054e0edc54fcd818467eb2bacb5e1178f903b12ab44119e0f2e8d2e",
"internal": "2343af71f72259dd705f4cc3a3b163c90edf331a5b6ebe173531aeb341649e1b"
},
"entity_types": [
"company",
"unit",
"client",
"supplier"
],
"scope": {
"purpose": "segmentation_only",
"canonical_addresses_changed": false,
"supplier_financial_review_changed": false,
"dependent_records_propagated": false,
"new_public_rights": [],
"real_grants_applied": false
},
"demo": {
"company_url": "http://127.0.0.1:8069/qa/enter/actor?open=1&geography=company",
"unit_url": "http://127.0.0.1:8069/qa/enter/actor?open=1&geography=unit",
"client_url": "http://127.0.0.1:8069/qa/enter/actor?module=commercial&open=1&geography=client",
"supplier_url": "http://127.0.0.1:8069/qa/enter/actor?open=1",
"readonly_company_url": "http://127.0.0.1:8069/qa/enter/validator?open=1&geography=company",
"initial_assignments": 0
},
"prior_proofs_preserved": [
{
"file": "docs/proofs/cartography-preparation-20261103.json",
"sha256": "d48a719a35c5d75781eb33fa324d4ee46d30880b629b82834192cfb87cf7a0c9"
},
{
"file": "docs/proofs/request-to-receipt-composition-20261103.json",
"sha256": "1713f42e3352ef13718a7394260b97c0c5ada40a9a3bbc87ab852313f6ab32ce"
},
{
"file": "docs/proofs/supplier-composition-20261103.json",
"sha256": "b37e265ed5cd6c96921eabdeb024ea2907630992726eab14ee2be170d3c88841"
},
{
"file": "docs/proofs/module-association-consolidation-summary-20261102.json",
"sha256": "8f693f39763ee21a22ebd3929d95ba1480f339eca18742fa53055c69eb5219ef"
}
],
"verification_scope": "41 command/access checks retained. Five additional pagination/visibility boundaries use26 prepared reader fixtures. The later country_code=MZ response field is checked by the14 demo probes; the41 checks were not repeated.",
"preservation": {
"installed_purchasing_sha256": "81899e531e9eec449717e694d8bdc106a9e220a828f5491ce918c1d2dc612787",
"target_database_connected": false,
"protected_six_records_changed": false,
"blocked_cache_cleared": false,
"previous_demo_data_written": false,
"concurrent_compras_sources_written": false,
"public_rights_changed": false,
"purchasing_activated_at_destination": false,
"publication": false,
"checkpoint": false
},
"limitations": [
"Only the new, physically guarded QA composition is enabled. No general destination migration or deployment validation.",
"The supplied workbook is a versioned reference declared INE-validated by the user; its current legal/administrative vigency is not independently verified. Source issues remain blocked and visible.",
"CountryMZ and source identity/version are attached only after an explicit geographic selection. No canonical fiscal/delivery address or supplier eligibility is changed.",
"Client location is company-shared within the authorised module; supplier location uses an explicit native provider and current host unit binding. No cross-unit or cross-provider equivalence is inferred.",
"Segmentation reports explicit current-version locations only; they do not represent counts of all registered clients or suppliers.",
"Catalogue pages25, history pages15; cross-book supplier reports validate authorised names in bounded batches100 and expose up to25 entries with a cursor. Sustained-load capability is not validated.",
"No source-correction/version-publication workflow, historical-location migration, foreign-country catalogue or integration with unrelated financial reports is declared delivered.",
"Owner/runtime least privilege separation and visual review remain pending."
],
"visual_review_pending": true,
"deployment_capacity_validated": false
}
+17
View File
@@ -0,0 +1,17 @@
{
"passed": true,
"checks": 8,
"names": [
"company opens the shared selector",
"unit opens the shared selector",
"client opens the shared selector",
"disabled composition hides location link",
"absent capability hides location link",
"unsaved client has no location target",
"unrecognised entity cannot generate a target",
"noninteger record ID is refused"
],
"source": "resources/js/GeographyLink.jsx",
"sha256": "1bad1cfbd2568cce7e9ee21e306f10465194f579a152b48187c6f6133533493a",
"visual_review": false
}
@@ -0,0 +1,38 @@
{
"passed": true,
"kind": "source_copy_fingerprint_supplement",
"sources": [
{
"name": "BudgetContext",
"file": "packages/budget-control/src/BudgetContext.php",
"sha256": "200b23fa560cc967bf6c9ccc1387ee9fefd9933f965811f8a4a0ab5f74f12e04"
},
{
"name": "BudgetControl",
"file": "packages/budget-control/src/BudgetControl.php",
"sha256": "1349d1ab4ab58a83c9abbf43549ebe7e4ed77717ed5463a2defac748cf7b9a31"
},
{
"name": "BudgetFailure",
"file": "packages/budget-control/src/BudgetFailure.php",
"sha256": "30ec4c7a5b45e5980ca517d167aa45e89f22a3429c76365fa1c1a94db5f4d8e0"
}
],
"probes": [
{
"source_copy_matches": true,
"runtime_reflection_verified": false
},
{
"source_copy_matches": true,
"runtime_reflection_verified": false
}
],
"runtime_probe_limit": "Standalone runtime reflection probe exceeded its30s limit; private diagnostics retained. No business commands were executed or repeated.",
"invoice_business_proof": {
"file": "docs/proofs/supplier-invoice-composition-20261103.json",
"sha256": "70faa647b0dac43f6d1b0111124b5451851dfd730148b10864e7f432914eecec"
},
"business_commands_repeated": false,
"financial_commands_executed": 0
}
+15
View File
@@ -0,0 +1,15 @@
{
"passed": true,
"checks": 6,
"names": [
"invoice view and capability expose link",
"missing right hides link",
"another unit right cannot expose link",
"disabled composition hides link",
"unit selection required",
"existing order and receipt navigation remains available"
],
"source": "resources/js/PurchasingHome.jsx",
"sha256": "f34bf1060bf987bd1b22e999e6ca05d76a3004607b8f670f580de37ddd847bd0",
"visual_review": false
}
@@ -0,0 +1,245 @@
{
"date": "2026-11-03T19:01:41.018Z",
"increment": "SGF-INVOICE-MATCHING-PROGRESS-QA-v1",
"passed": true,
"functional_code": true,
"checks": 47,
"tests": {
"available": {
"file": "private/invoice-progress-read-e286efd6035f/invoice-progress-read-result.json",
"sha256": "617a558ebdb78d15631fc5b482af3c609ee6c949840fbb9cd667d785eba3cc6a",
"checks": 14,
"result": {
"passed": true,
"checks": [
"authorised order exposes one matching projection per original line",
"native source order and accepted physical quantity are preserved",
"accepted unbilled1UN is available without inventing invoice or reservation",
"procurement and warehouse cannot read economic matching projection",
"foreign or unknown order remains outside authorised origin",
"unmapped unit cannot reuse matching projection",
"obsolete context header cannot read matching projection",
"single observed state yields same original source revision before UI capability decoration",
"disabled projection preserves original revision and invoice display",
"pending70 does not reserve or consume remaining60 after validated40",
"remaining quantity cannot exceed frozen order even with extra accepted input",
"existing return and reversal facts reduce accepted matching capacity",
"read deficit is explicit and remaining quantity is not negative",
"all reused source tables and sequences unchanged by read projection"
],
"variant": "available",
"order_id": 1,
"quantities": {
"line_id": 1,
"description": "Material recepcao QA",
"unit": "UN",
"ordered_milli": 1000,
"accepted_milli": 1000,
"returned_milli": 0,
"reversed_milli": 0,
"accepted_net_milli": 1000,
"validated_milli": 0,
"pending_milli": 0,
"remaining_milli": 1000,
"deficit_milli": 0
},
"financial_commands_repeated": 0,
"before_sha256": "a1e492f62b0dabc990a39c512bbff1be3a235c52b1301eeef81ef15d2979a1d7",
"after_sha256": "a1e492f62b0dabc990a39c512bbff1be3a235c52b1301eeef81ef15d2979a1d7",
"tables_checked": 142,
"new_right_names": [],
"visual_review": false,
"deployment_capacity_validated": false
}
},
"partial": {
"file": "private/invoice-progress-read-34534a38acd7/invoice-progress-read-result.json",
"sha256": "c8a53a904bd88f0e081f8955f3d3591566f33dbc43b043c5b1d0b81340ffcc72",
"checks": 16,
"result": {
"passed": true,
"checks": [
"authorised order exposes one matching projection per original line",
"native source order and accepted physical quantity are preserved",
"validated40+60 exhaust1UN while incompatible pending70 remains separately visible",
"original pending document is neither hidden rewritten nor deducted as a reservation",
"read discrepancy does not replace original independent-review permission decision",
"procurement and warehouse cannot read economic matching projection",
"foreign or unknown order remains outside authorised origin",
"unmapped unit cannot reuse matching projection",
"obsolete context header cannot read matching projection",
"single observed state yields same original source revision before UI capability decoration",
"disabled projection preserves original revision and invoice display",
"pending70 does not reserve or consume remaining60 after validated40",
"remaining quantity cannot exceed frozen order even with extra accepted input",
"existing return and reversal facts reduce accepted matching capacity",
"read deficit is explicit and remaining quantity is not negative",
"all reused source tables and sequences unchanged by read projection"
],
"variant": "partial",
"order_id": 2,
"quantities": {
"line_id": 2,
"description": "Material QA MAIN",
"unit": "UN",
"ordered_milli": 1000,
"accepted_milli": 1000,
"returned_milli": 0,
"reversed_milli": 0,
"accepted_net_milli": 1000,
"validated_milli": 1000,
"pending_milli": 700,
"remaining_milli": 0,
"deficit_milli": 0
},
"financial_commands_repeated": 0,
"before_sha256": "507ce4a1388db703972b546aa74bbe563ad3e7e484546f5296f71d513471abc9",
"after_sha256": "507ce4a1388db703972b546aa74bbe563ad3e7e484546f5296f71d513471abc9",
"tables_checked": 127,
"new_right_names": [],
"visual_review": false,
"deployment_capacity_validated": false
}
},
"ui": {
"file": "private/invoice-progress-read-34534a38acd7/invoice-progress-ui.json",
"sha256": "03a349940a85b771617fefcd0f63bce4a6473b111d7cef56d11788cc6e9ffa5b",
"checks": 11,
"result": {
"passed": true,
"checks": [
"milli quantities render exact three decimals without floating rounding",
"unsafe or fractional milli quantities are refused in display",
"pending overlap warning compares original quantity with actual remaining quantity",
"validated invoice is not warned as a new pending claim",
"other pending documents do not reserve remaining quantity in UI",
"quantity deficit remains explicit without negative available value",
"real invoice module wires matching capacity next to explicit line choice",
"real invoice module shows overlap note without changing document state",
"remaining capacity does not prefill or choose invoice quantity",
"opening matching projection never registers validates or recognises a document",
"late invoice history response cannot overwrite latest requested page"
],
"dom_simulation": true,
"business_commands": 0,
"visual_review": false
}
},
"demo": {
"file": "private/receipt-composition-9ec0a8e493ea/invoice-progress-demo.json",
"sha256": "9171093f9b0b7815af155989f43331074018373f55d773443d9299009938197f",
"checks": 6,
"result": {
"passed": true,
"checks": [
"new demo contains no main requests or invoices",
"native-authorised finance workspace remains available",
"empty invoice workspace invents no matching source",
"served matching module matches supplier-invoice-workspace.mjs",
"served matching module matches invoice-matching.mjs",
"demo probes preserve request invoice audit and permission data"
],
"before": "253435d4c1d4231b4334eb3f66e200f15c93b7e85d0c61e74b882e552adae94c",
"after": "253435d4c1d4231b4334eb3f66e200f15c93b7e85d0c61e74b882e552adae94c",
"visual_review": false
}
}
},
"sources": [
{
"file": "app/Modules/Purchasing/InvoiceMatchingProgress.php",
"sha256": "111f279dae49475d2959327155fd6b8d12ba75c42b3a20d6f18ddc3004505c8e"
},
{
"file": "app/Modules/Purchasing/InvoiceController.php",
"sha256": "85eb46ca7e65c60bed190e592a134eb48db5762c0a90b8cd4c9d6fbd81198ba4"
},
{
"file": "config/receipt_qa.php",
"sha256": "37bbd9055f1fd289e69e7ab328b8be2b2f1d0a553678301788d4d8181464fbcc"
},
{
"file": "public/invoice-matching.mjs",
"sha256": "e575a82b6c8b5cf531cff0a4d9dfe6e05234e73573bd025811c4bdf85baaed7c"
},
{
"file": "public/supplier-invoice-workspace.mjs",
"sha256": "a05b4f56151b8bc9735a0ba2ce47b475e22623aabb8be99a98290860efd6ae9e"
}
],
"pinned_native_manifests": {
"bundle": "7709a3d447d54c17d2fb4be4f9a0f70455c4a38c34e4bb8c643f6b5169071556",
"economic": "8b2d3aa61054e0edc54fcd818467eb2bacb5e1178f903b12ab44119e0f2e8d2e",
"internal": "2343af71f72259dd705f4cc3a3b163c90edf331a5b6ebe173531aeb341649e1b"
},
"authority": {
"new_right_names": [],
"new_writers": 0,
"native_validation_unchanged": true,
"state_definition_and_preview_confirmation_unchanged": true,
"source_revision_equivalent": true,
"pending_quantities_reserved": false,
"automatic_quantity_selection": false,
"original_pending_document_preserved": true
},
"read_projection": {
"two_aggregate_queries_for_quantity_facts": true,
"physical_corrections_reused_from_original_state": true,
"display_state_observed_once": true,
"full_dependency_revision_still_materialises_source_state": true,
"invoice_history_latest_response_wins": true
},
"regression": {
"completed_books_reused": true,
"financial_commands_repeated": 0,
"available_milli": 1000,
"after_validated40_60_remaining_milli": 0,
"pending70_milli": 700,
"all_source_tables_and_sequences_unchanged": true
},
"demo": {
"port": 8081,
"entry": "http://127.0.0.1:8081/qa/enter/issuer?open=1",
"initial_main_requests": 0,
"initial_invoices": 0
},
"prior_proofs_preserved": [
{
"file": "docs/proofs/request-history-composition-20261103.json",
"sha256": "564e0fdbc6a7a1142e72dbf835a96dadf0363d3dc963fc4cdc0a40bd05b8c26e"
},
{
"file": "docs/proofs/supplier-invoice-composition-20261103.json",
"sha256": "70faa647b0dac43f6d1b0111124b5451851dfd730148b10864e7f432914eecec"
},
{
"file": "docs/proofs/purchasing-continuity-composition-20261103.json",
"sha256": "6135df7c6dca784297b3a5f70a571585dc6d6a0d401a491c1d17ab91b780ce35"
},
{
"file": "docs/proofs/module-association-consolidation-summary-20261102.json",
"sha256": "8f693f39763ee21a22ebd3929d95ba1480f339eca18742fa53055c69eb5219ef"
}
],
"preservation": {
"installed_purchasing_sha256": "81899e531e9eec449717e694d8bdc106a9e220a828f5491ce918c1d2dc612787",
"target_database_connected": false,
"protected_six_records_changed": false,
"blocked_cache_cleared": false,
"previous_demo_data_written": false,
"public_rights_changed": false,
"publication": false,
"checkpoint": false
},
"limitations": [
"The quantity projection is read-only. A review permission or warning is not a promise that native validation will succeed.",
"Pending document quantities are shown separately and do not reserve matching capacity. No rejection correction or credit note is introduced.",
"The full order dependency state remains materialised for its original revision. Removing a duplicate observation is not a load benchmark or complete pagination/memory optimisation.",
"Source books contain one order line and existing invoice cases. Larger order histories, query/time/memory benchmarks and indexes are not validated by this trial.",
"Return/reversal boundary arithmetic is checked without repeating physical correction commands; complete physical correction suites remain their own proof.",
"DOM tests are not browser rendering visual or accessibility review. The React/Vite build is unchanged; served static module hashes and syntax are checked.",
"Operational policy, deployment compatibility, sustained load and capacity remain pending."
],
"visual_review_pending": true,
"deployment_capacity_validated": false
}
@@ -0,0 +1,608 @@
{
"id": "SGF-MODULE-FLOW-PREPARATION-v1",
"date": "2026-11-02",
"kind": "static_preparation_inventory",
"plan_sha256": "011ccd6ac148bbbeb8c9335af9c31c1b4e3f76ee29da0d3f9f1828d1c883a0b7",
"sources": [
{
"id": "requisitions_delivery",
"repository": "sgf",
"path": "docs/SGF_REQUISITIONS_8039_DELIVERY.md",
"sha256": "9c0bc172b91314c54e67ac1f547ce64cf2ce97d2df285172ad5d99eee554b167",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_workflow",
"repository": "compras",
"path": "app/Services/ReceiptWorkflow.php",
"sha256": "e824dbc7fb0e6dbc748f905fc84fbd6c8bfaff814df0ddf25aa6077fa89dcc78",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_workflow",
"repository": "compras",
"path": "app/Services/StockWorkflow.php",
"sha256": "18ddaa075432b84c0b0ee5241ff56ab9de9aa8e8db4e6132693bc7fd904b3a58",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_controller",
"repository": "compras",
"path": "app/Http/Controllers/StockController.php",
"sha256": "79aa0f96da7b8290b23489bdaa5c45a4d9f122483dbc0b4132793f76e4f97d0b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_lots",
"repository": "compras",
"path": "app/Services/InventoryLots.php",
"sha256": "911a0ce691c58ec1f635260e875ff8d4acfa2a45eecbf74b59b254b3d9209b52",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_counts",
"repository": "compras",
"path": "app/Services/InventoryCounts.php",
"sha256": "0c1b0d5e795a15b4d762c47fcdbeb19f225aa933b4507938f310ff25026afa11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_dispositions",
"repository": "compras",
"path": "app/Services/InventoryDispositions.php",
"sha256": "35a05ed9d6e2cb96a38c1d9b8cb02631bae000a9ac9633dbb53025ceb611983c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reversals",
"repository": "compras",
"path": "app/Services/InventoryReversals.php",
"sha256": "d1712029d7cedda6fbc9b0562bc108ebf8fb235d7aeb2bca4158639d3fc9a2a2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "warehouse_reservations",
"repository": "compras",
"path": "app/Services/WarehouseReservations.php",
"sha256": "3120eaf6d9c8cedf3c991edcb41133f5107ca62736cea7e082ae4773755ffb54",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_menu",
"repository": "sgf",
"path": "resources/js/stock-menu.js",
"sha256": "776360166b0fdacad343853eb335044306f078acb8da1439715010b4713dc4ff",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "invoice_workflow",
"repository": "compras",
"path": "app/Services/InvoiceWorkflow.php",
"sha256": "b98538fe9ec175340a90c40de2fd2b56e0d67a3b3ce5f41deafb4c6fe9f337c1",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "supplier_adapter",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierPayables.php",
"sha256": "c17d44391cbd96941aa2dd2eac2cb167508faf6453c6a1e86333846df1ba18b9",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "payables",
"repository": "sgf",
"path": "packages/payables/src/Payables.php",
"sha256": "ed853f3eb48ebcf91f51a8fe9ed8e49b0e1bc30cce4852cc9394d51cff28c74d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlements",
"repository": "sgf",
"path": "packages/payables/src/SupplierSettlements.php",
"sha256": "1238c8abe950ca9c88746bb020a85392b7e42e8d7e3c8d86f0a5f79015f9ddfe",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlement_delivery",
"repository": "sgf",
"path": "docs/SUPPLIER_SETTLEMENT_DELIVERY.md",
"sha256": "46d9836e70b17a78acb2230f76122de38096384e55b4b2f5298aa9c73ab1fd20",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_workflow",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopWorkflow.php",
"sha256": "a09d7c14c7101c36a2539f346494584340493a56ca951c7b1e66418f43d80adb",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "direct_costs",
"repository": "sgf",
"path": "app/Modules/Workshop/DirectCosts.php",
"sha256": "51f70a18731ed6371442f8e6364c52b163f46bf9b58c86b407b73f39fffb164c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_costs",
"repository": "sgf",
"path": "app/Modules/Industry/IndustrialCosts.php",
"sha256": "55ad20b756d94d3d734886f8a6aae157a32916735f8af9fb6a3a5c69859beb45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_billing",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopBilling.php",
"sha256": "039fdfdab77a8856b070249e028894a740222199969cabd614bfaab0c9e5a2d2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_invoicing",
"repository": "sgf",
"path": "app/Modules/Services/ServiceInvoicing.php",
"sha256": "b5ac9898f2089fad7799b9e62e5ce5db6df7fd64643e8e7e3b52c6a0e2d142a8",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_receivables",
"repository": "sgf",
"path": "app/Modules/Services/ServiceReceivables.php",
"sha256": "725bc8773a78cfd05dd0a729d885a97c0eef43854ca7ab4210b4d5e80d5d54ec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "catalogue_accounting",
"repository": "sgf",
"path": "app/Modules/Services/CatalogueAccounting.php",
"sha256": "15e72188334a0c6e9b65050e9609ac1c50a924899a753d47557e3375017e5d1c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "accounting_menu",
"repository": "sgf",
"path": "docs/ACCOUNTING_MENU_DELIVERY.md",
"sha256": "d2c72d3e1ba5256720a00520ea18fe5e2b9664517d7c8639e64dfbad00aebb40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_core",
"repository": "sgf",
"path": "packages/general-ledger/src/PayableJournal.php",
"sha256": "7f776c1ef6641f79862c7ab898778591911c59dd3f2ae5e1130b041c8c4289f3",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_adapter",
"repository": "sgf",
"path": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "a87d2ea373bc61bb139aa29f2a354b9813bbb2d6229a389f8d37fd8e9890edec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_DELIVERY.md",
"sha256": "e8aea14f18da04a407ae2a225c5537f133394b830fb059a233ad4367d976007f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_core",
"repository": "sgf",
"path": "packages/general-ledger/src/LedgerCycle.php",
"sha256": "5e6fdb1f5d47da16056043db75020e94172e9586a03a4b7e29c75e81b731fe14",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_native_adapter",
"repository": "compras",
"path": "app/Services/GeneralLedger.php",
"sha256": "fc80b20ad0ab2dac1c8df4b535349d05b416f1c5f2eec3e7718eda51f6626485",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_COMPLETE_CYCLE_DELIVERY.md",
"sha256": "424a6d9de6f3a02c4ff691df7e045cbf1fd42838bf20c03cca61dcc79c390b2d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_source",
"repository": "sgf",
"path": "app/Modules/Accounting/IndustrialLedgerSource.php",
"sha256": "2479bfd33182fdd918b14748ca9e00e8c789a127bf1746651c8f8f7d53205024",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_workspace",
"repository": "sgf",
"path": "resources/views/accounting/industrial-ledger.blade.php",
"sha256": "989ad6272fd14b681ca0000196dada276de0904f5ae69e4338f65e7e8cc5af45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_DELIVERY.md",
"sha256": "70c03e5093b349b81aef3132223dfcca440037ab2ab64ae48be28ec72f4c356f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_correction_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_CORRECTION_DELIVERY.md",
"sha256": "a9040aa59528af4acf5ac211d24d43624ee67ec03715ff128bceb56a8cad671b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_writer",
"repository": "sgf",
"path": "packages/inventory-write/src/ReceiptMovementWriter.php",
"sha256": "279cec2ec915e27cf431355fca1e36f21cb3c15a77d02834723a41ec7a6f8f40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_movement_adapter",
"repository": "compras",
"path": "app/Services/ReceiptStockMovement.php",
"sha256": "bd95d201563e4b028f7412eea77d5b157bbc464ddb5b34907bdf17b44d3c1637",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reader",
"repository": "sgf",
"path": "packages/inventory-read/src/InventoryReader.php",
"sha256": "9b0591600da07719d655324ccf0b740f06de07db2806540684c9730d048e44b6",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_read_adapter",
"repository": "sgf",
"path": "app/Modules/Inventory/StockReadController.php",
"sha256": "c6131733974b6902c556593709729356769d11aea9eada3fc5397246102068f4",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_stock_bridge",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopStock.php",
"sha256": "6460a4235fe7b0b4602b0aeb63a47f1a97e367e93baba6aa774be5fa0dac4e6e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_stock_controller",
"repository": "sgf",
"path": "app/Modules/Workshop/Http/WorkshopStockController.php",
"sha256": "06c9f85f926b4268636887f50458cd19fc1a467ae636dea94caba586fb463c0e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_recovery_workspace",
"repository": "sgf",
"path": "resources/views/accounting/receipt-recovery.blade.php",
"sha256": "aee62d5b35f044cf10f759b098647b2fbe4d3fb34c68a065fd1f274c1d0aa7ee",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "requisition_core",
"repository": "compras",
"path": "packages/purchasing/src/InternalRequisitions.php",
"sha256": "5acd82015a4f4b24c5f956139e7d9ec8822e1408e8edd6a2c21802673d647d94",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "requisition_qa_composition",
"repository": "sgf",
"path": "app/Modules/Purchasing/InternalRequisitionQa.php",
"sha256": "3195b51cca7546e050b62791407bdbfd130ddc2f2eabc06feed5c9bbd7f76303",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_core",
"repository": "sgf",
"path": "packages/general-ledger/src/StockValuation.php",
"sha256": "6fe704a737e8fd6684a60848b7956db345ca75fd18f517ac69c6f4dbee52e1df",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_observer",
"repository": "sgf",
"path": "app/Modules/Accounting/StockValuationRead.php",
"sha256": "cf8618800c6e93d12314cb11009505a4da0384d8701fbaaceaf2cee6489d47a3",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_schema",
"repository": "sgf",
"path": "packages/general-ledger/src/StockSchema.php",
"sha256": "2589414179da70769fff90d3f858e7bc73888cdb3a0f4cd33722a76b7b32bce4",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_composition",
"repository": "sgf",
"path": "packages/general-ledger/src/StockComposition.php",
"sha256": "2fafb664613b9c5aef30bfbec21d93701049a1114c5e2027ebecf1fdd885ae06",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_adapter",
"repository": "sgf",
"path": "integrations/purchasing/StockValuationAdapter.php",
"sha256": "2942e3567bf879301db85d4a7d0af15d9206e369e0aece264ffcc28d5c43c644",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_runtime",
"repository": "sgf",
"path": "app/Modules/Purchasing/ReceiptRuntime.php",
"sha256": "9b426476b2805094fb317cc753385ef43882fb4964883e880eac287eed89d9e0",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/ReceiptController.php",
"sha256": "2c946b782a62e81b3ec637e2f72590ed6a6c0774f04a8082171f9c898d37c2db",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_screen",
"repository": "sgf",
"path": "resources/views/receipt-workspace.blade.php",
"sha256": "8a0d15a6a6bde34a6aca4ddae3f7e0219f951c109a16e6ad9b5f0a69e678e1e8",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_order_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/OrderController.php",
"sha256": "4ebab47ecb008f3c31f970f399e8c19df7e860d7b6482227a800fb61dd28dd48",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "native_order_workflow",
"repository": "compras",
"path": "app/Services/PurchaseWorkflow.php",
"sha256": "f01bbda4b8f5b65b0c9bd508266f7b3868c9b881302b7e4c2702684dfae756cf",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_order_screen",
"repository": "sgf",
"path": "resources/views/order-workspace.blade.php",
"sha256": "e5302fffe7a76f9675fb04eacc544ba6e423a4af311c66e7e550f826253b014e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_sourcing_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/SourcingController.php",
"sha256": "0b297af4648a5690c99cac5015e009dfd3eb32d236fae63a5716b964e44c71f6",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_sourcing_screen",
"repository": "sgf",
"path": "resources/views/sourcing-workspace.blade.php",
"sha256": "922883253058514f7a8712c463e9f4f03d4fb7c786827a1dce85176cbf9bba46",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "native_quotation_controller",
"repository": "compras",
"path": "app/Http/Controllers/QuotationController.php",
"sha256": "23bc3af0fd4b67abb2f497742c06dff0208f3abcec1dd2c3338c15ff2abd3924",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "native_proposal_comparison",
"repository": "compras",
"path": "app/Services/ProposalComparison.php",
"sha256": "f34e7f736a18ae9e21bba324ebdf738c02cdcc6b4841367a13a5868631cd5dfa",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierController.php",
"sha256": "4bfff0204e67f21a6ddd785d64e7c91bd63bf65742add42fc3aa7f943ab5a6e4",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_access",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierAccess.php",
"sha256": "b823189d10e8ecf9a55e9021bffce023a7e6d4e2b0db2710c32910591968d814",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_screen",
"repository": "sgf",
"path": "resources/views/supplier-workspace.blade.php",
"sha256": "50df84132c27351cc9e43e38d55599fe64912aa0f50bb78a560b14f5f1445fc6",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_request_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/RequestController.php",
"sha256": "01033a50d6f1dfbdea34357e6853b978e066f11a1267fcd652606f67930d7009",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_request_access",
"repository": "sgf",
"path": "app/Modules/Purchasing/RequisitionAccess.php",
"sha256": "a955228df0f793d3b90f37e5ca890c53af88f6406140e98fe9a614c3821980cc",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_request_screen",
"repository": "sgf",
"path": "resources/views/request-workspace.blade.php",
"sha256": "829ecf90d08b1776828231efc43cf0540b12aa1177feede57f735bf0557c74c1",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_invoice_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/InvoiceController.php",
"sha256": "6812feb996507d204affd2a61945836cdc2db5fb8a21c585b899ec49bed142e6",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_invoice_screen",
"repository": "sgf",
"path": "resources/views/supplier-invoice-workspace.blade.php",
"sha256": "e359ab81d73ddcbf80117a6f3f1ec6b493da90c60cd2b42bf3648322baf47841",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_obligation_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/ObligationController.php",
"sha256": "347e629306d6c1f4873afac547d13fae8ade7b268906d1312a64e7eb6998e701",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_obligation_screen",
"repository": "sgf",
"path": "resources/views/supplier-obligation-workspace.blade.php",
"sha256": "72153d1b3756447bd6a9cbd739c41e5abd1602c09974300e971624e0a1df6d3e",
"meaning": "source_present_only_not_operational_proof"
}
],
"stages": [
{
"id": "requisition_order",
"owner": "purchasing",
"effect": "approved_procurement_origin",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "New SGF requests now start as drafts, submit/reserve once, receive distinct native approval and continue with the same request ID to sourcing, award, order/commitment and receipt in demo8068. Host budget entries stay unchanged. Supplier registry/review remains delivered in QA. Conversion of legacy host-reserved ir_requests requires its own responsibility/recovery protocol and is not delivered. Technical catalogues, formal regimes, later corrections and general deployment remain pending."
},
{
"id": "accepted_receipt",
"owner": "purchasing",
"effect": "accepted_physical_receipt",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "SGF source-to-receipt selected path is delivered in QA: three proposals, six evaluations, one approved award, one order/100MZN commitment and one receipt/physical movement, with canonical history and original workflows. Demo8066 starts before these individual decisions;8064/8065 preserved. General installation, catalogue search, sustained load and deployment remain pending; SGF internal requisition handoff remains separate."
},
{
"id": "physical_stock",
"owner": "stock",
"effect": "physical_movement_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Common physical readers/writers and selected stock valuation are delivered in isolated QA: receipt2UN/100, issue1UN/50, return0.5UN/25, net1.5UN/75. Same canonical physical/valuation book, with SELECT-only SGF observation and explicit rate/review/dependencies. Operational bindings/installation, real valuation method and hybrid integration with already posted direct/industrial materials remain pending."
},
{
"id": "supplier_invoice",
"owner": "purchasing",
"effect": "verified_supplier_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "SGF now registers pending supplier invoices and performs distinct exact matching through the original pinned workflow after actual SGF order/receipt. Two partial documents40+60 consume the original100MZN commitment once; conflicting pending70 is preserved and refused. Demo8070 starts before main issuance/receipt/invoice. The earlier common-payable11600MZN scenario retains its own proof; these new invoices are not automatically recognised as a payable. Correction/credit notes, binary attachments, real fiscal policy and general deployment remain separate."
},
{
"id": "supplier_payable",
"owner": "finance",
"effect": "supplier_obligation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Explicit SGF invoice preparation and distinct recognition now use the same original native supplier-payable adapter and canonical book in demo8071. One100MZN principal, bounded lists/evidence, current-source replay checks and atomic SGF provenance are proven in new QA fixtures. No automatic recognition, duplicate host debt, payment, accounting or imported-history cutover. Unknown maturity remains visible. Combining all earlier demos in one installation, correction/attachments, visual review, sustained load and general deployment remain pending."
},
{
"id": "supplier_settlement",
"owner": "finance",
"effect": "confirmed_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA confirmation/allocation/reversal and scoped receipt lookup exist; no bank execution, real reconciliation or live historical SGF cutover is delivered."
},
{
"id": "workshop_execution",
"owner": "workshop",
"effect": "verified_work_record",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Verified observations exist; no automatic physical stock movement."
},
{
"id": "workshop_stock_consumption",
"owner": "stock",
"effect": "company_material_consumption_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA issue, existing delivery link, partial allocations, returns and proposal withdrawal/rejection are implemented with explicit review and no duplicate movement. Native warehouse return and SGF observation have separate proof. Operational item/warehouse mappings and installed composition remain pending."
},
{
"id": "verified_cost",
"owner": "finance",
"effect": "validated_cost_version",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Current costs are synthetic; physical movement linkage is future and absence of rate stays visible."
},
{
"id": "sales_draft",
"owner": "commercial",
"effect": "commercial_draft_from_unique_origins",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Draft integration exists; cost is not sale price and draft does not decrement stock."
},
{
"id": "sales_invoice",
"owner": "commercial",
"effect": "issued_sales_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Actual test issuance and QA accounting recognition are proved. Real fiscal issuance/compliance remains guarded."
},
{
"id": "customer_receivable",
"owner": "finance",
"effect": "customer_receipt_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA opening, confirmed receipts/allocations400+600, reversal400 and accounting integration are proved. Real money, fiscal receipts and bank reconciliation are excluded."
},
{
"id": "general_ledger",
"owner": "accounting",
"effect": "balanced_journal_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "One QA writer covers supplier, sales/receivables, direct/industrial costs and their approved corrections; joint11 journals/23 lines gross8725 remains its own proof. A separate authorised physical-stock book adds entry100/issue50/return25, three journals/six lines gross175, stock75 and period close. No duplicated material cost: hybrid direct/industrial-stock composition remains excluded. SGF observes the canonical stock book; stock confirmations run in its native QA composition. Real chart/tax/valuation/payroll policy, further corrections, reopening, operational cutover and deployment remain pending."
}
],
"checks": {
"source_paths_and_hashes": true,
"single_owner_per_stage": true,
"mandatory_dependency_graph_acyclic": true,
"planned_consumers_explicit": true
},
"limitations": [
"Source existence is not execution, parity, acceptance or deployment evidence.",
"Dependencies represent the selected synthetic path, not universal product eligibility rules.",
"No stage transition engine, inventory adapter or journal engine implemented by this inventory."
],
"preservation": {
"database_connections": 0,
"source_execution": false,
"application_routes_changed": false,
"rights_changed": false,
"protected_six_records_untouched": true,
"blocked_cache_untouched": true,
"demos_changed": false,
"purchasing_activated": false,
"publication": false,
"checkpoint": false
},
"visual_review_pending": true,
"deployment_capacity_validated": false
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,762 @@
{
"id": "SGF-MODULE-FLOW-PREPARATION-v1",
"date": "2026-11-02",
"kind": "static_preparation_inventory",
"plan_sha256": "e1d670252e954d345ced9919b8b448d2d747e7a44ded3df4342d79499f9a3514",
"sources": [
{
"id": "requisitions_delivery",
"repository": "sgf",
"path": "docs/SGF_REQUISITIONS_8039_DELIVERY.md",
"sha256": "9c0bc172b91314c54e67ac1f547ce64cf2ce97d2df285172ad5d99eee554b167",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_workflow",
"repository": "compras",
"path": "app/Services/ReceiptWorkflow.php",
"sha256": "e824dbc7fb0e6dbc748f905fc84fbd6c8bfaff814df0ddf25aa6077fa89dcc78",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_workflow",
"repository": "compras",
"path": "app/Services/StockWorkflow.php",
"sha256": "18ddaa075432b84c0b0ee5241ff56ab9de9aa8e8db4e6132693bc7fd904b3a58",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_controller",
"repository": "compras",
"path": "app/Http/Controllers/StockController.php",
"sha256": "3bfb485a61f9723bc20ac57aa4a8dfaae9bbbc4d3a0a671722c3ca8e025b6462",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_lots",
"repository": "compras",
"path": "app/Services/InventoryLots.php",
"sha256": "911a0ce691c58ec1f635260e875ff8d4acfa2a45eecbf74b59b254b3d9209b52",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_counts",
"repository": "compras",
"path": "app/Services/InventoryCounts.php",
"sha256": "0c1b0d5e795a15b4d762c47fcdbeb19f225aa933b4507938f310ff25026afa11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_dispositions",
"repository": "compras",
"path": "app/Services/InventoryDispositions.php",
"sha256": "35a05ed9d6e2cb96a38c1d9b8cb02631bae000a9ac9633dbb53025ceb611983c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reversals",
"repository": "compras",
"path": "app/Services/InventoryReversals.php",
"sha256": "d1712029d7cedda6fbc9b0562bc108ebf8fb235d7aeb2bca4158639d3fc9a2a2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "warehouse_reservations",
"repository": "compras",
"path": "app/Services/WarehouseReservations.php",
"sha256": "3120eaf6d9c8cedf3c991edcb41133f5107ca62736cea7e082ae4773755ffb54",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_menu",
"repository": "sgf",
"path": "resources/js/stock-menu.js",
"sha256": "776360166b0fdacad343853eb335044306f078acb8da1439715010b4713dc4ff",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "invoice_workflow",
"repository": "compras",
"path": "app/Services/InvoiceWorkflow.php",
"sha256": "b98538fe9ec175340a90c40de2fd2b56e0d67a3b3ce5f41deafb4c6fe9f337c1",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "supplier_adapter",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierPayables.php",
"sha256": "c17d44391cbd96941aa2dd2eac2cb167508faf6453c6a1e86333846df1ba18b9",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "payables",
"repository": "sgf",
"path": "packages/payables/src/Payables.php",
"sha256": "ed853f3eb48ebcf91f51a8fe9ed8e49b0e1bc30cce4852cc9394d51cff28c74d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlements",
"repository": "sgf",
"path": "packages/payables/src/SupplierSettlements.php",
"sha256": "1238c8abe950ca9c88746bb020a85392b7e42e8d7e3c8d86f0a5f79015f9ddfe",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlement_delivery",
"repository": "sgf",
"path": "docs/SUPPLIER_SETTLEMENT_DELIVERY.md",
"sha256": "46d9836e70b17a78acb2230f76122de38096384e55b4b2f5298aa9c73ab1fd20",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_workflow",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopWorkflow.php",
"sha256": "a09d7c14c7101c36a2539f346494584340493a56ca951c7b1e66418f43d80adb",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "direct_costs",
"repository": "sgf",
"path": "app/Modules/Workshop/DirectCosts.php",
"sha256": "51f70a18731ed6371442f8e6364c52b163f46bf9b58c86b407b73f39fffb164c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_costs",
"repository": "sgf",
"path": "app/Modules/Industry/IndustrialCosts.php",
"sha256": "55ad20b756d94d3d734886f8a6aae157a32916735f8af9fb6a3a5c69859beb45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_billing",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopBilling.php",
"sha256": "039fdfdab77a8856b070249e028894a740222199969cabd614bfaab0c9e5a2d2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_invoicing",
"repository": "sgf",
"path": "app/Modules/Services/ServiceInvoicing.php",
"sha256": "b5ac9898f2089fad7799b9e62e5ce5db6df7fd64643e8e7e3b52c6a0e2d142a8",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_receivables",
"repository": "sgf",
"path": "app/Modules/Services/ServiceReceivables.php",
"sha256": "725bc8773a78cfd05dd0a729d885a97c0eef43854ca7ab4210b4d5e80d5d54ec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "catalogue_accounting",
"repository": "sgf",
"path": "app/Modules/Services/CatalogueAccounting.php",
"sha256": "15e72188334a0c6e9b65050e9609ac1c50a924899a753d47557e3375017e5d1c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "accounting_menu",
"repository": "sgf",
"path": "docs/ACCOUNTING_MENU_DELIVERY.md",
"sha256": "d2c72d3e1ba5256720a00520ea18fe5e2b9664517d7c8639e64dfbad00aebb40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_core",
"repository": "sgf",
"path": "packages/general-ledger/src/PayableJournal.php",
"sha256": "7f776c1ef6641f79862c7ab898778591911c59dd3f2ae5e1130b041c8c4289f3",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_adapter",
"repository": "sgf",
"path": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "a87d2ea373bc61bb139aa29f2a354b9813bbb2d6229a389f8d37fd8e9890edec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_DELIVERY.md",
"sha256": "e8aea14f18da04a407ae2a225c5537f133394b830fb059a233ad4367d976007f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_core",
"repository": "sgf",
"path": "packages/general-ledger/src/LedgerCycle.php",
"sha256": "5e6fdb1f5d47da16056043db75020e94172e9586a03a4b7e29c75e81b731fe14",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_native_adapter",
"repository": "compras",
"path": "app/Services/GeneralLedger.php",
"sha256": "fc80b20ad0ab2dac1c8df4b535349d05b416f1c5f2eec3e7718eda51f6626485",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_COMPLETE_CYCLE_DELIVERY.md",
"sha256": "424a6d9de6f3a02c4ff691df7e045cbf1fd42838bf20c03cca61dcc79c390b2d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_source",
"repository": "sgf",
"path": "app/Modules/Accounting/IndustrialLedgerSource.php",
"sha256": "2479bfd33182fdd918b14748ca9e00e8c789a127bf1746651c8f8f7d53205024",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_workspace",
"repository": "sgf",
"path": "resources/views/accounting/industrial-ledger.blade.php",
"sha256": "989ad6272fd14b681ca0000196dada276de0904f5ae69e4338f65e7e8cc5af45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_DELIVERY.md",
"sha256": "70c03e5093b349b81aef3132223dfcca440037ab2ab64ae48be28ec72f4c356f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_correction_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_CORRECTION_DELIVERY.md",
"sha256": "a9040aa59528af4acf5ac211d24d43624ee67ec03715ff128bceb56a8cad671b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_writer",
"repository": "sgf",
"path": "packages/inventory-write/src/ReceiptMovementWriter.php",
"sha256": "279cec2ec915e27cf431355fca1e36f21cb3c15a77d02834723a41ec7a6f8f40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_movement_adapter",
"repository": "compras",
"path": "app/Services/ReceiptStockMovement.php",
"sha256": "bd95d201563e4b028f7412eea77d5b157bbc464ddb5b34907bdf17b44d3c1637",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reader",
"repository": "sgf",
"path": "packages/inventory-read/src/InventoryReader.php",
"sha256": "9b0591600da07719d655324ccf0b740f06de07db2806540684c9730d048e44b6",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_read_adapter",
"repository": "sgf",
"path": "app/Modules/Inventory/StockReadController.php",
"sha256": "c6131733974b6902c556593709729356769d11aea9eada3fc5397246102068f4",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_stock_bridge",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopStock.php",
"sha256": "6460a4235fe7b0b4602b0aeb63a47f1a97e367e93baba6aa774be5fa0dac4e6e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_stock_controller",
"repository": "sgf",
"path": "app/Modules/Workshop/Http/WorkshopStockController.php",
"sha256": "06c9f85f926b4268636887f50458cd19fc1a467ae636dea94caba586fb463c0e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_recovery_workspace",
"repository": "sgf",
"path": "resources/views/accounting/receipt-recovery.blade.php",
"sha256": "aee62d5b35f044cf10f759b098647b2fbe4d3fb34c68a065fd1f274c1d0aa7ee",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "requisition_core",
"repository": "compras",
"path": "packages/purchasing/src/InternalRequisitions.php",
"sha256": "5acd82015a4f4b24c5f956139e7d9ec8822e1408e8edd6a2c21802673d647d94",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "requisition_qa_composition",
"repository": "sgf",
"path": "app/Modules/Purchasing/InternalRequisitionQa.php",
"sha256": "3195b51cca7546e050b62791407bdbfd130ddc2f2eabc06feed5c9bbd7f76303",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_core",
"repository": "sgf",
"path": "packages/general-ledger/src/StockValuation.php",
"sha256": "6fe704a737e8fd6684a60848b7956db345ca75fd18f517ac69c6f4dbee52e1df",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_observer",
"repository": "sgf",
"path": "app/Modules/Accounting/StockValuationRead.php",
"sha256": "cf8618800c6e93d12314cb11009505a4da0384d8701fbaaceaf2cee6489d47a3",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_schema",
"repository": "sgf",
"path": "packages/general-ledger/src/StockSchema.php",
"sha256": "2589414179da70769fff90d3f858e7bc73888cdb3a0f4cd33722a76b7b32bce4",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_composition",
"repository": "sgf",
"path": "packages/general-ledger/src/StockComposition.php",
"sha256": "2fafb664613b9c5aef30bfbec21d93701049a1114c5e2027ebecf1fdd885ae06",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_adapter",
"repository": "sgf",
"path": "integrations/purchasing/StockValuationAdapter.php",
"sha256": "2942e3567bf879301db85d4a7d0af15d9206e369e0aece264ffcc28d5c43c644",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_runtime",
"repository": "sgf",
"path": "app/Modules/Purchasing/ReceiptRuntime.php",
"sha256": "9b426476b2805094fb317cc753385ef43882fb4964883e880eac287eed89d9e0",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/ReceiptController.php",
"sha256": "0226b354db20a0eab19598ff35dbb35e0fa7f117de0c477e0b870159024d49df",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_screen",
"repository": "sgf",
"path": "resources/views/receipt-workspace.blade.php",
"sha256": "57018d5cc586e2ff03bbf09f97853a2eb297fc1ad7e7f3b8b3dc2f8d76008d3d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_order_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/OrderController.php",
"sha256": "4ebab47ecb008f3c31f970f399e8c19df7e860d7b6482227a800fb61dd28dd48",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "native_order_workflow",
"repository": "compras",
"path": "app/Services/PurchaseWorkflow.php",
"sha256": "f01bbda4b8f5b65b0c9bd508266f7b3868c9b881302b7e4c2702684dfae756cf",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_order_screen",
"repository": "sgf",
"path": "resources/views/order-workspace.blade.php",
"sha256": "c6e066c436ba7002feef63f3fa280c5a0d158fe01dfe0091cfd03fac8e61d959",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_sourcing_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/SourcingController.php",
"sha256": "84d807fe841a47335836e281677813157d78ed28c4e46cf1a4267121b7aedf17",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_sourcing_screen",
"repository": "sgf",
"path": "resources/views/sourcing-workspace.blade.php",
"sha256": "67123c60d74807568c53a0c8d9ce8a7685a3b77115cb9fd37bef874e63a2c980",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "native_quotation_controller",
"repository": "compras",
"path": "app/Http/Controllers/QuotationController.php",
"sha256": "23bc3af0fd4b67abb2f497742c06dff0208f3abcec1dd2c3338c15ff2abd3924",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "native_proposal_comparison",
"repository": "compras",
"path": "app/Services/ProposalComparison.php",
"sha256": "f34e7f736a18ae9e21bba324ebdf738c02cdcc6b4841367a13a5868631cd5dfa",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierController.php",
"sha256": "30d4ef72e079a63b470c952727aaa7c42a45302a58b50d085a53a57737a99048",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_access",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierAccess.php",
"sha256": "b823189d10e8ecf9a55e9021bffce023a7e6d4e2b0db2710c32910591968d814",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_screen",
"repository": "sgf",
"path": "resources/views/supplier-workspace.blade.php",
"sha256": "010afb19afd35b90d6b7ffe048f77b97c85b2329d7253cb9c1765e869ca1ec3b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_request_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/RequestController.php",
"sha256": "c5c2b78866be7f0e1c8ba09c1af538cefcfbafbea81197833b50821bba0fcbca",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_request_access",
"repository": "sgf",
"path": "app/Modules/Purchasing/RequisitionAccess.php",
"sha256": "a955228df0f793d3b90f37e5ca890c53af88f6406140e98fe9a614c3821980cc",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_request_screen",
"repository": "sgf",
"path": "resources/views/request-workspace.blade.php",
"sha256": "6d1a344e62958b3ae654f6c519cf420906ac3bb3aa257839ce58d77d795af86b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_invoice_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/InvoiceController.php",
"sha256": "85eb46ca7e65c60bed190e592a134eb48db5762c0a90b8cd4c9d6fbd81198ba4",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_invoice_screen",
"repository": "sgf",
"path": "resources/views/supplier-invoice-workspace.blade.php",
"sha256": "916c7243f78953a9afa2d495f5dc0a4ea687dd876598bd880a60875913ab2063",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_obligation_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/ObligationController.php",
"sha256": "347e629306d6c1f4873afac547d13fae8ade7b268906d1312a64e7eb6998e701",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_obligation_screen",
"repository": "sgf",
"path": "resources/views/supplier-obligation-workspace.blade.php",
"sha256": "ce0dc4159d42efcff9e09ec99a2ce5a2d378a215d4a853a37417a0ebf5445506",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_purchasing_workspace",
"repository": "sgf",
"path": "app/Modules/Purchasing/WorkspaceNavigation.php",
"sha256": "2e4fa17a60b718eda505b619859f9743517716eba573a382c54a95377254ccc8",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_purchasing_navigation",
"repository": "sgf",
"path": "resources/views/partials/purchasing-navigation.blade.php",
"sha256": "95b3941ef72eb8df59624320a622eb96e5fdd2e7b0e5365c0332d06952ebbd50",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_picker",
"repository": "sgf",
"path": "public/supplier-picker-model.mjs",
"sha256": "7eda0e980a0d7c88a8fbf6ea446de2d169df22138a9fb6f62ecfa50b10506bde",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_search_ui",
"repository": "sgf",
"path": "public/sourcing-workspace.mjs",
"sha256": "81bcbf8bc45d7005b9de635c6476437d3ce13e2f17d98dfc2aad4a4892eb2c52",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_dossier_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/DossierController.php",
"sha256": "73133fd4075c76a4933d4475275d017fb0392e64076ff3bd7b284e0b967781d7",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_dossier_screen",
"repository": "sgf",
"path": "resources/views/purchasing-dossier.blade.php",
"sha256": "f8c1466cf669fe69a70320c8851ffe1b511a351934902fa77f1354a9eb1d4f56",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_dossier_ui",
"repository": "sgf",
"path": "public/purchasing-dossier.mjs",
"sha256": "3a632080b0952e28e2dbeb65367f76acb72025d43c850567cf655419710c1384",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_catalogue",
"repository": "sgf",
"path": "app/Modules/Purchasing/ReceiptCatalogue.php",
"sha256": "d9e529adae22387dd4e17d7bf9558bdde2f13e1f1e39700f07c4c97299ff3348",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_workspace_ui",
"repository": "sgf",
"path": "public/receipt-workspace.mjs",
"sha256": "86421d30dc9868b10da2153f8bf0b50d9904ab5ccccbf9813464083ae1e20bd2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_documents",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierDocumentsController.php",
"sha256": "4f5c6b3ee9d6608cffb1f8db24552902c4d2b6044e36e00932157c0b05e3e3c6",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_document_storage",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierDocumentFiles.php",
"sha256": "cc140b5c56781fbcb8f582972b6030e8602fd1fe4ad02d435ae6676f177819db",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_document_ui",
"repository": "sgf",
"path": "public/supplier-documents.mjs",
"sha256": "accfc25b8c20a975032e30a01443a2286de0212ed34cd9d9c321ef5c87aa0b36",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_documents",
"repository": "sgf",
"path": "app/Modules/Purchasing/ReceiptDocumentsController.php",
"sha256": "ae238ccec6628949dac4d18cc3514849303dda432ec371f7507e84498108e03c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_process_navigation",
"repository": "sgf",
"path": "app/Modules/Purchasing/ProcessNavigation.php",
"sha256": "6e1f5e6e3db88be7ab91e233e4bb8225df524b71b06ea68ab967fd2541f9303d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_purchasing_focus",
"repository": "sgf",
"path": "public/purchasing-focus.mjs",
"sha256": "434319b8de23f5d6892666bd53232d463a0d458fe948cc6d7b476ad1228fafb6",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_stage_history",
"repository": "sgf",
"path": "app/Modules/Purchasing/ProcessHistory.php",
"sha256": "255a4ca5901cf323e3fd16e2fb16509962710c5d5b67e2e425cdc1f7e7a257a2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_invoice_workspace_ui",
"repository": "sgf",
"path": "public/supplier-invoice-workspace.mjs",
"sha256": "a05b4f56151b8bc9735a0ba2ce47b475e22623aabb8be99a98290860efd6ae9e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_obligation_workspace_ui",
"repository": "sgf",
"path": "public/supplier-obligation-workspace.mjs",
"sha256": "c2608e3cab7cd1810437a3a978e6f6ccbf2600a83dd0a39bd38510db8249f551",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_request_history_ui",
"repository": "sgf",
"path": "public/request-history.mjs",
"sha256": "523b8d018d0191c68628922b180b8798e567b8bb4b54ce986002fcbb6c5a809e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_request_workspace_ui",
"repository": "sgf",
"path": "public/request-workspace.mjs",
"sha256": "9a44d4153b8a158dc310ff157ecc0b108888661c6c467f46a099e2abee869cb4",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_invoice_matching_progress",
"repository": "sgf",
"path": "app/Modules/Purchasing/InvoiceMatchingProgress.php",
"sha256": "111f279dae49475d2959327155fd6b8d12ba75c42b3a20d6f18ddc3004505c8e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_invoice_matching_ui",
"repository": "sgf",
"path": "public/invoice-matching.mjs",
"sha256": "e575a82b6c8b5cf531cff0a4d9dfe6e05234e73573bd025811c4bdf85baaed7c",
"meaning": "source_present_only_not_operational_proof"
}
],
"stages": [
{
"id": "requisition_order",
"owner": "purchasing",
"effect": "approved_procurement_origin",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "New SGF requests now start as drafts, submit/reserve once, receive distinct native approval and continue with the same request ID to sourcing, award, order/commitment and receipt in demo8068. Host budget entries stay unchanged. Supplier registry/review remains delivered in QA. Conversion of legacy host-reserved ir_requests requires its own responsibility/recovery protocol and is not delivered. Technical catalogues, formal regimes, later corrections and general deployment remain pending. Superseding the earlier separate-fixture limitation for Purchasing: demo8072 now starts before the first main request and completes request, sourcing, award, order, receipt, invoice and explicit payable recognition in one native book, with shared permission-aware navigation. Supplier registry and geography are mounted in the same host. This does not unify all six ERP modules or validate deployment, payments or accounting of this origin. The earlier100-supplier selection cap is resolved in demo8073: literal name/NUIT search and server pages25/100, explicit selection, stale-response protection and supplier fingerprint revalidation before a new quotation. Existing rights and native rules are reused; no deployment or sustained-load capacity conclusion. A GET-only dossier now correlates the actual request through independently authorised downstream evidence in demo8074, with independent25-row pages and filtered history. Read proof reuses the completed canonical regression book without repeating financial commands; all142 tables and sequences remain unchanged. This is not a universal task queue, readiness decision or deployment validation. Supplier binary evidence is now delivered in demo8076 through the original native upload/download and review invalidation, with private storage, content/context/version conference, idempotent command provenance and bounded metadata pages15. Pending evidence excludes the supplier from sourcing until a distinct current-version review. Other attachment types, authenticity requirements, crash-orphan reconciliation, retention, sustained load and deployment remain separate. Contextual read navigation is delivered in demo8078: authorised dossier cards open exact source ids across seven workspaces, including receipt evidence and invoice-specific obligation consultation. Strict parameter parsing, destination authority, parent matching and stale startup cancellation avoid first-page dependence and automatic fallback. The completed canonical QA book is reused without command replay;142 tables and sequences are unchanged. This does not decide readiness, execute a next stage, grant access, validate visual rendering, sustained load or deployment. A subsequent scope fix filters request/sourcing audit events in SQL before limits/counts/pages, closing an alternate downstream financial-history exposure without changing original audit or writers. Empty initial supplier searches now survive middleware normalisation while closed-award and permission guards remain. Completed canonical history book is reused read-only with142 tables/sequences intact. Demo8080 removes the direct request-history25-event cap using bounded cursor pages25/100, own-stage SQL filtering and encrypted request/actor/context/size-bound cursors with600-second lifetime. Initial page is reused; history refresh does not reset unsaved request fields.127 original event ids traverse once despite a new head note; refresh includes128. Audit-volume fixtures are not operational request revisions. An inherited100MZN order setup was preserved and removed from future history harness runs. This is not a persistent MVCC snapshot, visual acceptance, sustained-load or deployment validation."
},
{
"id": "accepted_receipt",
"owner": "purchasing",
"effect": "accepted_physical_receipt",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "SGF source-to-receipt selected path is delivered in QA: three proposals, six evaluations, one approved award, one order/100MZN commitment and one receipt/physical movement, with canonical history and original workflows. Demo8066 starts before these individual decisions;8064/8065 preserved. General installation, catalogue search, sustained load and deployment remain pending; SGF internal requisition handoff remains separate. Demo8075 now provides per-line article search/pages25/100 beyond the earlier100 cap and navigable receipt history beyond25, with explicit choice and article fingerprint revalidation before a new physical confirmation. Existing unit/binding rules and writer remain authoritative;27 partial receipts total exactly1UN in regression, with25 native-writer history fixtures. Catalogue requests are deferred until a line is selected. No new valuation, payment, visual, sustained-load or deployment claim. Receipt delivery/quality/other binary evidence is delivered in demo8077 through the pinned native attachment service and private download, with bounded pages15 and dossier events. Individual reason, current source/context/revision/bytes, idempotent keys, content reuse within receipt/type and verified rollback compensation are proven. One HTTP-created document and15 native volume fixtures preserve one1000milli physical movement. Attachment is not a new acceptance/quality decision or authenticity certification. Orphan reconciliation, retention/quotas, other origins, visual review, sustained load and deployment remain separate. Contextual read navigation is delivered in demo8078: authorised dossier cards open exact source ids across seven workspaces, including receipt evidence and invoice-specific obligation consultation. Strict parameter parsing, destination authority, parent matching and stale startup cancellation avoid first-page dependence and automatic fallback. The completed canonical QA book is reused without command replay;142 tables and sequences are unchanged. This does not decide readiness, execute a next stage, grant access, validate visual rendering, sustained load or deployment. Demo8079 fixes the actual form-to-picker binding and blank initial article search. DOM-to-real-HTTP proof selects an article, transmits its revision, previews, confirms1UN and recovers a deliberately lost response with201/200, one receipt/movement. This is not browser visual acceptance or a new concurrency/load trial. Inline receipt/invoice/obligation source links now preserve ids and follow the currently presented menu; destination APIs remain authoritative. No new financial effect, permission, deployment or operational-readiness claim."
},
{
"id": "physical_stock",
"owner": "stock",
"effect": "physical_movement_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Common physical readers/writers and selected stock valuation are delivered in isolated QA: receipt2UN/100, issue1UN/50, return0.5UN/25, net1.5UN/75. Same canonical physical/valuation book, with SELECT-only SGF observation and explicit rate/review/dependencies. Operational bindings/installation, real valuation method and hybrid integration with already posted direct/industrial materials remain pending."
},
{
"id": "supplier_invoice",
"owner": "purchasing",
"effect": "verified_supplier_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "SGF now registers pending supplier invoices and performs distinct exact matching through the original pinned workflow after actual SGF order/receipt. Two partial documents40+60 consume the original100MZN commitment once; conflicting pending70 is preserved and refused. Demo8070 starts before main issuance/receipt/invoice. The earlier common-payable11600MZN scenario retains its own proof; these new invoices are not automatically recognised as a payable. Correction/credit notes, binary attachments, real fiscal policy and general deployment remain separate. Superseding the earlier separate-fixture limitation for Purchasing: demo8072 now starts before the first main request and completes request, sourcing, award, order, receipt, invoice and explicit payable recognition in one native book, with shared permission-aware navigation. Supplier registry and geography are mounted in the same host. This does not unify all six ERP modules or validate deployment, payments or accounting of this origin. Contextual read navigation is delivered in demo8078: authorised dossier cards open exact source ids across seven workspaces, including receipt evidence and invoice-specific obligation consultation. Strict parameter parsing, destination authority, parent matching and stale startup cancellation avoid first-page dependence and automatic fallback. The completed canonical QA book is reused without command replay;142 tables and sequences are unchanged. This does not decide readiness, execute a next stage, grant access, validate visual rendering, sustained load or deployment. Inline receipt/invoice/obligation source links now preserve ids and follow the currently presented menu; destination APIs remain authoritative. No new financial effect, permission, deployment or operational-readiness claim. Demo8081 exposes per-line ordered/accepted/returned/reversed/validated/pending/remaining quantities using two aggregate fact queries and original correction values. Pending documents do not reserve quantity; overlap is a read warning, not a replacement for native validation. Two completed QA books are reused read-only with all tables/sequences unchanged. The display revision uses one original state observation before capability decoration; mutation/state definitions are unchanged. Full dependency materialisation, large invoice-history scaling, visual review, sustained load and deployment remain pending."
},
{
"id": "supplier_payable",
"owner": "finance",
"effect": "supplier_obligation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Explicit SGF invoice preparation and distinct recognition now use the same original native supplier-payable adapter and canonical book in demo8071. One100MZN principal, bounded lists/evidence, current-source replay checks and atomic SGF provenance are proven in new QA fixtures. No automatic recognition, duplicate host debt, payment, accounting or imported-history cutover. Unknown maturity remains visible. Combining all earlier demos in one installation, correction/attachments, visual review, sustained load and general deployment remain pending. Superseding the earlier separate-fixture limitation for Purchasing: demo8072 now starts before the first main request and completes request, sourcing, award, order, receipt, invoice and explicit payable recognition in one native book, with shared permission-aware navigation. Supplier registry and geography are mounted in the same host. This does not unify all six ERP modules or validate deployment, payments or accounting of this origin. Contextual read navigation is delivered in demo8078: authorised dossier cards open exact source ids across seven workspaces, including receipt evidence and invoice-specific obligation consultation. Strict parameter parsing, destination authority, parent matching and stale startup cancellation avoid first-page dependence and automatic fallback. The completed canonical QA book is reused without command replay;142 tables and sequences are unchanged. This does not decide readiness, execute a next stage, grant access, validate visual rendering, sustained load or deployment. Inline receipt/invoice/obligation source links now preserve ids and follow the currently presented menu; destination APIs remain authoritative. No new financial effect, permission, deployment or operational-readiness claim."
},
{
"id": "supplier_settlement",
"owner": "finance",
"effect": "confirmed_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA confirmation/allocation/reversal and scoped receipt lookup exist; no bank execution, real reconciliation or live historical SGF cutover is delivered."
},
{
"id": "workshop_execution",
"owner": "workshop",
"effect": "verified_work_record",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Verified observations exist; no automatic physical stock movement."
},
{
"id": "workshop_stock_consumption",
"owner": "stock",
"effect": "company_material_consumption_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA issue, existing delivery link, partial allocations, returns and proposal withdrawal/rejection are implemented with explicit review and no duplicate movement. Native warehouse return and SGF observation have separate proof. Operational item/warehouse mappings and installed composition remain pending."
},
{
"id": "verified_cost",
"owner": "finance",
"effect": "validated_cost_version",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Current costs are synthetic; physical movement linkage is future and absence of rate stays visible."
},
{
"id": "sales_draft",
"owner": "commercial",
"effect": "commercial_draft_from_unique_origins",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Draft integration exists; cost is not sale price and draft does not decrement stock."
},
{
"id": "sales_invoice",
"owner": "commercial",
"effect": "issued_sales_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Actual test issuance and QA accounting recognition are proved. Real fiscal issuance/compliance remains guarded."
},
{
"id": "customer_receivable",
"owner": "finance",
"effect": "customer_receipt_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA opening, confirmed receipts/allocations400+600, reversal400 and accounting integration are proved. Real money, fiscal receipts and bank reconciliation are excluded."
},
{
"id": "general_ledger",
"owner": "accounting",
"effect": "balanced_journal_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "One QA writer covers supplier, sales/receivables, direct/industrial costs and their approved corrections; joint11 journals/23 lines gross8725 remains its own proof. A separate authorised physical-stock book adds entry100/issue50/return25, three journals/six lines gross175, stock75 and period close. No duplicated material cost: hybrid direct/industrial-stock composition remains excluded. SGF observes the canonical stock book; stock confirmations run in its native QA composition. Real chart/tax/valuation/payroll policy, further corrections, reopening, operational cutover and deployment remain pending."
}
],
"checks": {
"source_paths_and_hashes": true,
"single_owner_per_stage": true,
"mandatory_dependency_graph_acyclic": true,
"planned_consumers_explicit": true
},
"limitations": [
"Source existence is not execution, parity, acceptance or deployment evidence.",
"Dependencies represent the selected synthetic path, not universal product eligibility rules.",
"No stage transition engine, inventory adapter or journal engine implemented by this inventory."
],
"preservation": {
"database_connections": 0,
"source_execution": false,
"application_routes_changed": false,
"rights_changed": false,
"protected_six_records_untouched": true,
"blocked_cache_untouched": true,
"demos_changed": false,
"purchasing_activated": false,
"publication": false,
"checkpoint": false
},
"visual_review_pending": true,
"deployment_capacity_validated": false
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,127 @@
{
"increment": "LEDGER-RECEIPT-RECOVERY-v1",
"date": "2026-11-03T06:51:10.616Z",
"functional_code": true,
"checks": 29,
"private_evidence": [
{
"file": "private/ledger-922dac0c0596/ledger-receipt-cases.json",
"sha256": "faba42dd362dfc884c2fd274e4c8acf374fee279177908bbed851c73c0385651",
"result": {
"passed": true,
"checks": 10,
"mode": {
"isolation": "repeatable read",
"read_only": "on"
},
"writer_locks": 0,
"no_duplicate_or_write": true,
"source_rights_unchanged": true
}
},
{
"file": "private/ledger-922dac0c0596/receipt-http-final.json",
"sha256": "56c3ef57beb52d4620b2868717f571bf172762ed484e697d7708548c4cb7fb7a",
"result": {
"passed": true,
"checks": 16,
"actual_http": true,
"no_business_commands": true,
"visual_review": false
}
},
{
"file": "private/ledger-922dac0c0596/receipt-form.json",
"sha256": "b5a3ed4a80909b7563b3d5ec637be4affde6a938fa05bee16d1be02552f4d32c",
"result": {
"passed": true,
"checks": 3,
"all_rendered_scripts_compile": true,
"mock_get_only": true,
"actual_browser": false
}
}
],
"previous_manifest": {
"file": "docs/proofs/common-ledger-industrial-correction-20261103.json",
"sha256": "b8beee9278cd77e1a7dcfa7d47eae3e26952c51e656cec7bc34a835bb05cd478",
"private_artifacts_verified": 16
},
"sources": [
{
"file": "packages/general-ledger/src/PayableJournal.php",
"sha256": "aa1d622759e647d21df66164a0582473f2c1daac95cd69f5c0f712a6fd6753d2"
},
{
"file": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "dd889c2dc80f96e789b8ebf48fc4b2794f2fc8239b863e1f9ee8b1aa29108f0b"
},
{
"file": "app/Modules/Accounting/GeneralLedgerController.php",
"sha256": "5e4e8ff9b47ad49a960be9332d275eb3e8e05aa3325f810efada6444af9363c5"
},
{
"file": "routes/web.php",
"sha256": "fea1121bee65e36abbaf7947363a57d1f520a7b302939d861509724bea54d89d"
},
{
"file": "scripts/ledger-cost-proof.php",
"sha256": "7669ba664da0b1697e39165b318f6e6a460ec1f695bbe183ebd4a2011959f8ad"
},
{
"file": "scripts/ledger-receipt-proof.php",
"sha256": "ed32245f22b8f92dafe0caea0892eada6cc1380b60fe0eea5a215f608b3938ee"
},
{
"file": "scripts/ledger-receipt-http.mjs",
"sha256": "aff5448633a098f8752fbd76a3c4e481dc87956cd8dc12d99b9db53f2c14b16e"
},
{
"file": "resources/views/accounting/receipt-recovery.blade.php",
"sha256": "36f5ad2065f6a5621c2888b747f0d8a94f0d9c19533f59d5b87c88a8ffd30b83"
},
{
"file": "resources/views/accounting/general-ledger.blade.php",
"sha256": "08c4a0ffb33ff1928843af486595f13b4a16d815e32a3dfb7e0f8a3de3893133"
},
{
"file": "resources/views/accounting/cost-ledger.blade.php",
"sha256": "d4efd89e8c01639c195ff3839f1683733a05845b62fb6a917079729e92ee931f"
},
{
"file": "resources/views/accounting/sales-ledger.blade.php",
"sha256": "073920e59860fe63a4dd251dd4fef0cec1182e56eb369fd16563583c22e74035"
},
{
"file": "resources/views/accounting/industrial-ledger.blade.php",
"sha256": "989ad6272fd14b681ca0000196dada276de0904f5ae69e4338f65e7e8cc5af45"
},
{
"file": "resources/views/accounting/ledger-composition.blade.php",
"sha256": "2f97c561f34c62f1e65e572298e01dcc4dd5f5bfa6ffa644ced690ea704e1bfb"
},
{
"file": "docs/GENERAL_LEDGER_RECEIPT_RECOVERY_DELIVERY.md",
"sha256": "7a31c5312867f7bf2750d2136bce1aea393cf5e3f12df562b09607a49a9f66c5"
},
{
"file": "README.md",
"sha256": "4da32de3fc35e7345dce0e8d1acb7f9ddaed0b912cb6c5259d04948ad126376c"
}
],
"preservation": {
"old_demos_not_reset": true,
"six_records_untouched": true,
"blocked_cache_untouched": true,
"no_real_grants": true,
"no_migrations": true,
"no_publication": true,
"no_checkpoint": true
},
"limits": {
"visual_review_pending": true,
"sustained_load_validated": false,
"deployment_capacity_validated": false,
"read_only_receipt_not_current_source_conference": true
}
}
@@ -0,0 +1,7 @@
{
"passed": true,
"matrix_no_uncovered_known_hash_drift": true,
"association_consolidated_sources_unchanged": true,
"receipt_targeted_test_and_source_hashes_match": true,
"database_connections": 0
}
@@ -0,0 +1,426 @@
{
"id": "SGF-MODULE-FLOW-PREPARATION-v1",
"date": "2026-11-02",
"kind": "static_preparation_inventory",
"plan_sha256": "c9fd8ca531353566addf81b8ae091649b2f0f62ec0692a6790498714f239e2c2",
"sources": [
{
"id": "requisitions_delivery",
"repository": "sgf",
"path": "docs/SGF_REQUISITIONS_8039_DELIVERY.md",
"sha256": "9c0bc172b91314c54e67ac1f547ce64cf2ce97d2df285172ad5d99eee554b167",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_workflow",
"repository": "compras",
"path": "app/Services/ReceiptWorkflow.php",
"sha256": "a7325d4fdb09d1767d0d4fa3661bcf9b254e8506285080d6063bbed487bb522c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_workflow",
"repository": "compras",
"path": "app/Services/StockWorkflow.php",
"sha256": "18ddaa075432b84c0b0ee5241ff56ab9de9aa8e8db4e6132693bc7fd904b3a58",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_controller",
"repository": "compras",
"path": "app/Http/Controllers/StockController.php",
"sha256": "79aa0f96da7b8290b23489bdaa5c45a4d9f122483dbc0b4132793f76e4f97d0b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_lots",
"repository": "compras",
"path": "app/Services/InventoryLots.php",
"sha256": "911a0ce691c58ec1f635260e875ff8d4acfa2a45eecbf74b59b254b3d9209b52",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_counts",
"repository": "compras",
"path": "app/Services/InventoryCounts.php",
"sha256": "0c1b0d5e795a15b4d762c47fcdbeb19f225aa933b4507938f310ff25026afa11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_dispositions",
"repository": "compras",
"path": "app/Services/InventoryDispositions.php",
"sha256": "35a05ed9d6e2cb96a38c1d9b8cb02631bae000a9ac9633dbb53025ceb611983c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reversals",
"repository": "compras",
"path": "app/Services/InventoryReversals.php",
"sha256": "d1712029d7cedda6fbc9b0562bc108ebf8fb235d7aeb2bca4158639d3fc9a2a2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "warehouse_reservations",
"repository": "compras",
"path": "app/Services/WarehouseReservations.php",
"sha256": "3120eaf6d9c8cedf3c991edcb41133f5107ca62736cea7e082ae4773755ffb54",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_menu",
"repository": "sgf",
"path": "resources/js/stock-menu.js",
"sha256": "776360166b0fdacad343853eb335044306f078acb8da1439715010b4713dc4ff",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "invoice_workflow",
"repository": "compras",
"path": "app/Services/InvoiceWorkflow.php",
"sha256": "f1e8530315e33d3c8eb23752699b3bbcba0af5248af478e861f3b3e75a462c11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "supplier_adapter",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierPayables.php",
"sha256": "c17d44391cbd96941aa2dd2eac2cb167508faf6453c6a1e86333846df1ba18b9",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "payables",
"repository": "sgf",
"path": "packages/payables/src/Payables.php",
"sha256": "ed853f3eb48ebcf91f51a8fe9ed8e49b0e1bc30cce4852cc9394d51cff28c74d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlements",
"repository": "sgf",
"path": "packages/payables/src/SupplierSettlements.php",
"sha256": "1238c8abe950ca9c88746bb020a85392b7e42e8d7e3c8d86f0a5f79015f9ddfe",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlement_delivery",
"repository": "sgf",
"path": "docs/SUPPLIER_SETTLEMENT_DELIVERY.md",
"sha256": "46d9836e70b17a78acb2230f76122de38096384e55b4b2f5298aa9c73ab1fd20",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_workflow",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopWorkflow.php",
"sha256": "a09d7c14c7101c36a2539f346494584340493a56ca951c7b1e66418f43d80adb",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "direct_costs",
"repository": "sgf",
"path": "app/Modules/Workshop/DirectCosts.php",
"sha256": "51f70a18731ed6371442f8e6364c52b163f46bf9b58c86b407b73f39fffb164c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_costs",
"repository": "sgf",
"path": "app/Modules/Industry/IndustrialCosts.php",
"sha256": "55ad20b756d94d3d734886f8a6aae157a32916735f8af9fb6a3a5c69859beb45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_billing",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopBilling.php",
"sha256": "039fdfdab77a8856b070249e028894a740222199969cabd614bfaab0c9e5a2d2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_invoicing",
"repository": "sgf",
"path": "app/Modules/Services/ServiceInvoicing.php",
"sha256": "b5ac9898f2089fad7799b9e62e5ce5db6df7fd64643e8e7e3b52c6a0e2d142a8",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_receivables",
"repository": "sgf",
"path": "app/Modules/Services/ServiceReceivables.php",
"sha256": "725bc8773a78cfd05dd0a729d885a97c0eef43854ca7ab4210b4d5e80d5d54ec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "catalogue_accounting",
"repository": "sgf",
"path": "app/Modules/Services/CatalogueAccounting.php",
"sha256": "15e72188334a0c6e9b65050e9609ac1c50a924899a753d47557e3375017e5d1c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "accounting_menu",
"repository": "sgf",
"path": "docs/ACCOUNTING_MENU_DELIVERY.md",
"sha256": "d2c72d3e1ba5256720a00520ea18fe5e2b9664517d7c8639e64dfbad00aebb40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_core",
"repository": "sgf",
"path": "packages/general-ledger/src/PayableJournal.php",
"sha256": "aa1d622759e647d21df66164a0582473f2c1daac95cd69f5c0f712a6fd6753d2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_adapter",
"repository": "sgf",
"path": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "a87d2ea373bc61bb139aa29f2a354b9813bbb2d6229a389f8d37fd8e9890edec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_DELIVERY.md",
"sha256": "e8aea14f18da04a407ae2a225c5537f133394b830fb059a233ad4367d976007f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_core",
"repository": "sgf",
"path": "packages/general-ledger/src/LedgerCycle.php",
"sha256": "5040369c2fc24ef713e758e5d4d1241fc52b8bef421ea7bf45855000f755d524",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_native_adapter",
"repository": "compras",
"path": "app/Services/GeneralLedger.php",
"sha256": "fc80b20ad0ab2dac1c8df4b535349d05b416f1c5f2eec3e7718eda51f6626485",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_COMPLETE_CYCLE_DELIVERY.md",
"sha256": "424a6d9de6f3a02c4ff691df7e045cbf1fd42838bf20c03cca61dcc79c390b2d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_source",
"repository": "sgf",
"path": "app/Modules/Accounting/IndustrialLedgerSource.php",
"sha256": "2479bfd33182fdd918b14748ca9e00e8c789a127bf1746651c8f8f7d53205024",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_workspace",
"repository": "sgf",
"path": "resources/views/accounting/industrial-ledger.blade.php",
"sha256": "989ad6272fd14b681ca0000196dada276de0904f5ae69e4338f65e7e8cc5af45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_DELIVERY.md",
"sha256": "70c03e5093b349b81aef3132223dfcca440037ab2ab64ae48be28ec72f4c356f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_correction_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_CORRECTION_DELIVERY.md",
"sha256": "a9040aa59528af4acf5ac211d24d43624ee67ec03715ff128bceb56a8cad671b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_writer",
"repository": "sgf",
"path": "packages/inventory-write/src/ReceiptMovementWriter.php",
"sha256": "279cec2ec915e27cf431355fca1e36f21cb3c15a77d02834723a41ec7a6f8f40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_movement_adapter",
"repository": "compras",
"path": "app/Services/ReceiptStockMovement.php",
"sha256": "bd95d201563e4b028f7412eea77d5b157bbc464ddb5b34907bdf17b44d3c1637",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reader",
"repository": "sgf",
"path": "packages/inventory-read/src/InventoryReader.php",
"sha256": "9b0591600da07719d655324ccf0b740f06de07db2806540684c9730d048e44b6",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_read_adapter",
"repository": "sgf",
"path": "app/Modules/Inventory/StockReadController.php",
"sha256": "c6131733974b6902c556593709729356769d11aea9eada3fc5397246102068f4",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_stock_bridge",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopStock.php",
"sha256": "6460a4235fe7b0b4602b0aeb63a47f1a97e367e93baba6aa774be5fa0dac4e6e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_stock_controller",
"repository": "sgf",
"path": "app/Modules/Workshop/Http/WorkshopStockController.php",
"sha256": "06c9f85f926b4268636887f50458cd19fc1a467ae636dea94caba586fb463c0e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_recovery_workspace",
"repository": "sgf",
"path": "resources/views/accounting/receipt-recovery.blade.php",
"sha256": "aee62d5b35f044cf10f759b098647b2fbe4d3fb34c68a065fd1f274c1d0aa7ee",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "requisition_core",
"repository": "compras",
"path": "packages/purchasing/src/InternalRequisitions.php",
"sha256": "5acd82015a4f4b24c5f956139e7d9ec8822e1408e8edd6a2c21802673d647d94",
"meaning": "source_present_only_not_operational_proof"
}
],
"stages": [
{
"id": "requisition_order",
"owner": "purchasing",
"effect": "approved_procurement_origin",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Requisition core exists in Compras; the SGF adapter/interface was installed only in isolated demonstration8039. This root source tree has no SGF requisition adapter. Do not confuse the demonstration with a generally installed composition or activate a candidate."
},
{
"id": "accepted_receipt",
"owner": "purchasing",
"effect": "accepted_physical_receipt",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Native receipt workflow delegates once to the shared writer; SGF observes the actual movement in QA. Preparing/confirming receipts in the SGF interface and an installed procurement composition remain pending."
},
{
"id": "physical_stock",
"owner": "stock",
"effect": "physical_movement_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Shared paged reader works in both QA hosts, with source revisions and explicit bindings. Operational bindings/installation and stock valuation remain pending; missing source is not zero."
},
{
"id": "supplier_invoice",
"owner": "purchasing",
"effect": "verified_supplier_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Native verified invoice participates in common payable QA; SGF history remains a controlled receipt, not a live historical adapter. Real fiscal policy and installed procurement composition remain separate."
},
{
"id": "supplier_payable",
"owner": "finance",
"effect": "supplier_obligation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Common recognition, controlled history, report and receipt lookup are implemented in QA. Due date stays unknown when absent; operational history responsibility/source mapping and cutover remain pending."
},
{
"id": "supplier_settlement",
"owner": "finance",
"effect": "confirmed_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA confirmation/allocation/reversal and scoped receipt lookup exist; no bank execution, real reconciliation or live historical SGF cutover is delivered."
},
{
"id": "workshop_execution",
"owner": "workshop",
"effect": "verified_work_record",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Verified observations exist; no automatic physical stock movement."
},
{
"id": "workshop_stock_consumption",
"owner": "stock",
"effect": "company_material_consumption_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA issue, existing delivery link, partial allocations, returns and proposal withdrawal/rejection are implemented with explicit review and no duplicate movement. Native warehouse return and SGF observation have separate proof. Operational item/warehouse mappings and installed composition remain pending."
},
{
"id": "verified_cost",
"owner": "finance",
"effect": "validated_cost_version",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Current costs are synthetic; physical movement linkage is future and absence of rate stays visible."
},
{
"id": "sales_draft",
"owner": "commercial",
"effect": "commercial_draft_from_unique_origins",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Draft integration exists; cost is not sale price and draft does not decrement stock."
},
{
"id": "sales_invoice",
"owner": "commercial",
"effect": "issued_sales_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Actual test issuance and QA accounting recognition are proved. Real fiscal issuance/compliance remains guarded."
},
{
"id": "customer_receivable",
"owner": "finance",
"effect": "customer_receipt_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA opening, confirmed receipts/allocations400+600, reversal400 and accounting integration are proved. Real money, fiscal receipts and bank reconciliation are excluded."
},
{
"id": "general_ledger",
"owner": "accounting",
"effect": "balanced_journal_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Authorised QA source effects use one writer: supplier recognition/settlement/correction, sales and receivable allocations/reversal, direct cost and its correction, industrial result1800 and its explicit atomic correction to1820 with residual300 excluded. New corrected SGF composition reconciles11 journals/23 lines and gross8725 with joint reviewed close. Real chart/tax policy, stock valuation, payroll, additional correction chains, reopening, historical/operational cutover and deployment remain excluded."
}
],
"checks": {
"source_paths_and_hashes": true,
"single_owner_per_stage": true,
"mandatory_dependency_graph_acyclic": true,
"planned_consumers_explicit": true
},
"limitations": [
"Source existence is not execution, parity, acceptance or deployment evidence.",
"Dependencies represent the selected synthetic path, not universal product eligibility rules.",
"No stage transition engine, inventory adapter or journal engine implemented by this inventory."
],
"preservation": {
"database_connections": 0,
"source_execution": false,
"application_routes_changed": false,
"rights_changed": false,
"protected_six_records_untouched": true,
"blocked_cache_untouched": true,
"demos_changed": false,
"purchasing_activated": false,
"publication": false,
"checkpoint": false
},
"visual_review_pending": true,
"deployment_capacity_validated": false
}
@@ -0,0 +1,580 @@
{
"id": "SGF-MODULE-FLOW-PREPARATION-v1",
"date": "2026-11-02",
"kind": "static_preparation_inventory",
"plan_sha256": "1e1f2114e4543a81344ec58bb889e426164c60e50922d2a197a170a85036bc7d",
"sources": [
{
"id": "requisitions_delivery",
"repository": "sgf",
"path": "docs/SGF_REQUISITIONS_8039_DELIVERY.md",
"sha256": "9c0bc172b91314c54e67ac1f547ce64cf2ce97d2df285172ad5d99eee554b167",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_workflow",
"repository": "compras",
"path": "app/Services/ReceiptWorkflow.php",
"sha256": "1ff96d8bdbae2a3fd44feaf9520d1c28edbb8e14728ef4c881b6187e41878d62",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_workflow",
"repository": "compras",
"path": "app/Services/StockWorkflow.php",
"sha256": "18ddaa075432b84c0b0ee5241ff56ab9de9aa8e8db4e6132693bc7fd904b3a58",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_controller",
"repository": "compras",
"path": "app/Http/Controllers/StockController.php",
"sha256": "79aa0f96da7b8290b23489bdaa5c45a4d9f122483dbc0b4132793f76e4f97d0b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_lots",
"repository": "compras",
"path": "app/Services/InventoryLots.php",
"sha256": "911a0ce691c58ec1f635260e875ff8d4acfa2a45eecbf74b59b254b3d9209b52",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_counts",
"repository": "compras",
"path": "app/Services/InventoryCounts.php",
"sha256": "0c1b0d5e795a15b4d762c47fcdbeb19f225aa933b4507938f310ff25026afa11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_dispositions",
"repository": "compras",
"path": "app/Services/InventoryDispositions.php",
"sha256": "35a05ed9d6e2cb96a38c1d9b8cb02631bae000a9ac9633dbb53025ceb611983c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reversals",
"repository": "compras",
"path": "app/Services/InventoryReversals.php",
"sha256": "d1712029d7cedda6fbc9b0562bc108ebf8fb235d7aeb2bca4158639d3fc9a2a2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "warehouse_reservations",
"repository": "compras",
"path": "app/Services/WarehouseReservations.php",
"sha256": "3120eaf6d9c8cedf3c991edcb41133f5107ca62736cea7e082ae4773755ffb54",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_menu",
"repository": "sgf",
"path": "resources/js/stock-menu.js",
"sha256": "776360166b0fdacad343853eb335044306f078acb8da1439715010b4713dc4ff",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "invoice_workflow",
"repository": "compras",
"path": "app/Services/InvoiceWorkflow.php",
"sha256": "b98538fe9ec175340a90c40de2fd2b56e0d67a3b3ce5f41deafb4c6fe9f337c1",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "supplier_adapter",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierPayables.php",
"sha256": "c17d44391cbd96941aa2dd2eac2cb167508faf6453c6a1e86333846df1ba18b9",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "payables",
"repository": "sgf",
"path": "packages/payables/src/Payables.php",
"sha256": "ed853f3eb48ebcf91f51a8fe9ed8e49b0e1bc30cce4852cc9394d51cff28c74d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlements",
"repository": "sgf",
"path": "packages/payables/src/SupplierSettlements.php",
"sha256": "1238c8abe950ca9c88746bb020a85392b7e42e8d7e3c8d86f0a5f79015f9ddfe",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlement_delivery",
"repository": "sgf",
"path": "docs/SUPPLIER_SETTLEMENT_DELIVERY.md",
"sha256": "46d9836e70b17a78acb2230f76122de38096384e55b4b2f5298aa9c73ab1fd20",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_workflow",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopWorkflow.php",
"sha256": "a09d7c14c7101c36a2539f346494584340493a56ca951c7b1e66418f43d80adb",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "direct_costs",
"repository": "sgf",
"path": "app/Modules/Workshop/DirectCosts.php",
"sha256": "51f70a18731ed6371442f8e6364c52b163f46bf9b58c86b407b73f39fffb164c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_costs",
"repository": "sgf",
"path": "app/Modules/Industry/IndustrialCosts.php",
"sha256": "55ad20b756d94d3d734886f8a6aae157a32916735f8af9fb6a3a5c69859beb45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_billing",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopBilling.php",
"sha256": "039fdfdab77a8856b070249e028894a740222199969cabd614bfaab0c9e5a2d2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_invoicing",
"repository": "sgf",
"path": "app/Modules/Services/ServiceInvoicing.php",
"sha256": "b5ac9898f2089fad7799b9e62e5ce5db6df7fd64643e8e7e3b52c6a0e2d142a8",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_receivables",
"repository": "sgf",
"path": "app/Modules/Services/ServiceReceivables.php",
"sha256": "725bc8773a78cfd05dd0a729d885a97c0eef43854ca7ab4210b4d5e80d5d54ec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "catalogue_accounting",
"repository": "sgf",
"path": "app/Modules/Services/CatalogueAccounting.php",
"sha256": "15e72188334a0c6e9b65050e9609ac1c50a924899a753d47557e3375017e5d1c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "accounting_menu",
"repository": "sgf",
"path": "docs/ACCOUNTING_MENU_DELIVERY.md",
"sha256": "d2c72d3e1ba5256720a00520ea18fe5e2b9664517d7c8639e64dfbad00aebb40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_core",
"repository": "sgf",
"path": "packages/general-ledger/src/PayableJournal.php",
"sha256": "7f776c1ef6641f79862c7ab898778591911c59dd3f2ae5e1130b041c8c4289f3",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_adapter",
"repository": "sgf",
"path": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "a87d2ea373bc61bb139aa29f2a354b9813bbb2d6229a389f8d37fd8e9890edec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_DELIVERY.md",
"sha256": "e8aea14f18da04a407ae2a225c5537f133394b830fb059a233ad4367d976007f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_core",
"repository": "sgf",
"path": "packages/general-ledger/src/LedgerCycle.php",
"sha256": "5e6fdb1f5d47da16056043db75020e94172e9586a03a4b7e29c75e81b731fe14",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_native_adapter",
"repository": "compras",
"path": "app/Services/GeneralLedger.php",
"sha256": "fc80b20ad0ab2dac1c8df4b535349d05b416f1c5f2eec3e7718eda51f6626485",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_COMPLETE_CYCLE_DELIVERY.md",
"sha256": "424a6d9de6f3a02c4ff691df7e045cbf1fd42838bf20c03cca61dcc79c390b2d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_source",
"repository": "sgf",
"path": "app/Modules/Accounting/IndustrialLedgerSource.php",
"sha256": "2479bfd33182fdd918b14748ca9e00e8c789a127bf1746651c8f8f7d53205024",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_workspace",
"repository": "sgf",
"path": "resources/views/accounting/industrial-ledger.blade.php",
"sha256": "989ad6272fd14b681ca0000196dada276de0904f5ae69e4338f65e7e8cc5af45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_DELIVERY.md",
"sha256": "70c03e5093b349b81aef3132223dfcca440037ab2ab64ae48be28ec72f4c356f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_correction_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_CORRECTION_DELIVERY.md",
"sha256": "a9040aa59528af4acf5ac211d24d43624ee67ec03715ff128bceb56a8cad671b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_writer",
"repository": "sgf",
"path": "packages/inventory-write/src/ReceiptMovementWriter.php",
"sha256": "279cec2ec915e27cf431355fca1e36f21cb3c15a77d02834723a41ec7a6f8f40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_movement_adapter",
"repository": "compras",
"path": "app/Services/ReceiptStockMovement.php",
"sha256": "bd95d201563e4b028f7412eea77d5b157bbc464ddb5b34907bdf17b44d3c1637",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reader",
"repository": "sgf",
"path": "packages/inventory-read/src/InventoryReader.php",
"sha256": "9b0591600da07719d655324ccf0b740f06de07db2806540684c9730d048e44b6",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_read_adapter",
"repository": "sgf",
"path": "app/Modules/Inventory/StockReadController.php",
"sha256": "c6131733974b6902c556593709729356769d11aea9eada3fc5397246102068f4",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_stock_bridge",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopStock.php",
"sha256": "6460a4235fe7b0b4602b0aeb63a47f1a97e367e93baba6aa774be5fa0dac4e6e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_stock_controller",
"repository": "sgf",
"path": "app/Modules/Workshop/Http/WorkshopStockController.php",
"sha256": "06c9f85f926b4268636887f50458cd19fc1a467ae636dea94caba586fb463c0e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_recovery_workspace",
"repository": "sgf",
"path": "resources/views/accounting/receipt-recovery.blade.php",
"sha256": "aee62d5b35f044cf10f759b098647b2fbe4d3fb34c68a065fd1f274c1d0aa7ee",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "requisition_core",
"repository": "compras",
"path": "packages/purchasing/src/InternalRequisitions.php",
"sha256": "5acd82015a4f4b24c5f956139e7d9ec8822e1408e8edd6a2c21802673d647d94",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "requisition_qa_composition",
"repository": "sgf",
"path": "app/Modules/Purchasing/InternalRequisitionQa.php",
"sha256": "3195b51cca7546e050b62791407bdbfd130ddc2f2eabc06feed5c9bbd7f76303",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_core",
"repository": "sgf",
"path": "packages/general-ledger/src/StockValuation.php",
"sha256": "6fe704a737e8fd6684a60848b7956db345ca75fd18f517ac69c6f4dbee52e1df",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_observer",
"repository": "sgf",
"path": "app/Modules/Accounting/StockValuationRead.php",
"sha256": "cf8618800c6e93d12314cb11009505a4da0384d8701fbaaceaf2cee6489d47a3",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_schema",
"repository": "sgf",
"path": "packages/general-ledger/src/StockSchema.php",
"sha256": "2589414179da70769fff90d3f858e7bc73888cdb3a0f4cd33722a76b7b32bce4",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_composition",
"repository": "sgf",
"path": "packages/general-ledger/src/StockComposition.php",
"sha256": "2fafb664613b9c5aef30bfbec21d93701049a1114c5e2027ebecf1fdd885ae06",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_adapter",
"repository": "sgf",
"path": "integrations/purchasing/StockValuationAdapter.php",
"sha256": "2942e3567bf879301db85d4a7d0af15d9206e369e0aece264ffcc28d5c43c644",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_runtime",
"repository": "sgf",
"path": "app/Modules/Purchasing/ReceiptRuntime.php",
"sha256": "633933146ae8292f2bbc6da2b52ef8fbb9c820a853d27cf23f2783d3cfb159d6",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/ReceiptController.php",
"sha256": "2c946b782a62e81b3ec637e2f72590ed6a6c0774f04a8082171f9c898d37c2db",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_screen",
"repository": "sgf",
"path": "resources/views/receipt-workspace.blade.php",
"sha256": "8a0d15a6a6bde34a6aca4ddae3f7e0219f951c109a16e6ad9b5f0a69e678e1e8",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_order_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/OrderController.php",
"sha256": "4ebab47ecb008f3c31f970f399e8c19df7e860d7b6482227a800fb61dd28dd48",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "native_order_workflow",
"repository": "compras",
"path": "app/Services/PurchaseWorkflow.php",
"sha256": "eab95525462191f4895c3ffa91ce99ac824c5af541f7576fbae7527575559e9b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_order_screen",
"repository": "sgf",
"path": "resources/views/order-workspace.blade.php",
"sha256": "e5302fffe7a76f9675fb04eacc544ba6e423a4af311c66e7e550f826253b014e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_sourcing_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/SourcingController.php",
"sha256": "0b297af4648a5690c99cac5015e009dfd3eb32d236fae63a5716b964e44c71f6",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_sourcing_screen",
"repository": "sgf",
"path": "resources/views/sourcing-workspace.blade.php",
"sha256": "922883253058514f7a8712c463e9f4f03d4fb7c786827a1dce85176cbf9bba46",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "native_quotation_controller",
"repository": "compras",
"path": "app/Http/Controllers/QuotationController.php",
"sha256": "23bc3af0fd4b67abb2f497742c06dff0208f3abcec1dd2c3338c15ff2abd3924",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "native_proposal_comparison",
"repository": "compras",
"path": "app/Services/ProposalComparison.php",
"sha256": "f34e7f736a18ae9e21bba324ebdf738c02cdcc6b4841367a13a5868631cd5dfa",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierController.php",
"sha256": "4bfff0204e67f21a6ddd785d64e7c91bd63bf65742add42fc3aa7f943ab5a6e4",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_access",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierAccess.php",
"sha256": "b823189d10e8ecf9a55e9021bffce023a7e6d4e2b0db2710c32910591968d814",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_supplier_screen",
"repository": "sgf",
"path": "resources/views/supplier-workspace.blade.php",
"sha256": "50df84132c27351cc9e43e38d55599fe64912aa0f50bb78a560b14f5f1445fc6",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_request_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/RequestController.php",
"sha256": "01033a50d6f1dfbdea34357e6853b978e066f11a1267fcd652606f67930d7009",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_request_access",
"repository": "sgf",
"path": "app/Modules/Purchasing/RequisitionAccess.php",
"sha256": "a955228df0f793d3b90f37e5ca890c53af88f6406140e98fe9a614c3821980cc",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_request_screen",
"repository": "sgf",
"path": "resources/views/request-workspace.blade.php",
"sha256": "829ecf90d08b1776828231efc43cf0540b12aa1177feede57f735bf0557c74c1",
"meaning": "source_present_only_not_operational_proof"
}
],
"stages": [
{
"id": "requisition_order",
"owner": "purchasing",
"effect": "approved_procurement_origin",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "New SGF requests now start as drafts, submit/reserve once, receive distinct native approval and continue with the same request ID to sourcing, award, order/commitment and receipt in demo8068. Host budget entries stay unchanged. Supplier registry/review remains delivered in QA. Conversion of legacy host-reserved ir_requests requires its own responsibility/recovery protocol and is not delivered. Technical catalogues, formal regimes, later corrections and general deployment remain pending."
},
{
"id": "accepted_receipt",
"owner": "purchasing",
"effect": "accepted_physical_receipt",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "SGF source-to-receipt selected path is delivered in QA: three proposals, six evaluations, one approved award, one order/100MZN commitment and one receipt/physical movement, with canonical history and original workflows. Demo8066 starts before these individual decisions;8064/8065 preserved. General installation, catalogue search, sustained load and deployment remain pending; SGF internal requisition handoff remains separate."
},
{
"id": "physical_stock",
"owner": "stock",
"effect": "physical_movement_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Common physical readers/writers and selected stock valuation are delivered in isolated QA: receipt2UN/100, issue1UN/50, return0.5UN/25, net1.5UN/75. Same canonical physical/valuation book, with SELECT-only SGF observation and explicit rate/review/dependencies. Operational bindings/installation, real valuation method and hybrid integration with already posted direct/industrial materials remain pending."
},
{
"id": "supplier_invoice",
"owner": "purchasing",
"effect": "verified_supplier_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Native verified invoice participates in common payable QA; SGF history remains a controlled receipt, not a live historical adapter. Real fiscal policy and installed procurement composition remain separate."
},
{
"id": "supplier_payable",
"owner": "finance",
"effect": "supplier_obligation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Common recognition, controlled history, report and receipt lookup are implemented in QA. Due date stays unknown when absent; operational history responsibility/source mapping and cutover remain pending."
},
{
"id": "supplier_settlement",
"owner": "finance",
"effect": "confirmed_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA confirmation/allocation/reversal and scoped receipt lookup exist; no bank execution, real reconciliation or live historical SGF cutover is delivered."
},
{
"id": "workshop_execution",
"owner": "workshop",
"effect": "verified_work_record",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Verified observations exist; no automatic physical stock movement."
},
{
"id": "workshop_stock_consumption",
"owner": "stock",
"effect": "company_material_consumption_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA issue, existing delivery link, partial allocations, returns and proposal withdrawal/rejection are implemented with explicit review and no duplicate movement. Native warehouse return and SGF observation have separate proof. Operational item/warehouse mappings and installed composition remain pending."
},
{
"id": "verified_cost",
"owner": "finance",
"effect": "validated_cost_version",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Current costs are synthetic; physical movement linkage is future and absence of rate stays visible."
},
{
"id": "sales_draft",
"owner": "commercial",
"effect": "commercial_draft_from_unique_origins",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Draft integration exists; cost is not sale price and draft does not decrement stock."
},
{
"id": "sales_invoice",
"owner": "commercial",
"effect": "issued_sales_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Actual test issuance and QA accounting recognition are proved. Real fiscal issuance/compliance remains guarded."
},
{
"id": "customer_receivable",
"owner": "finance",
"effect": "customer_receipt_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA opening, confirmed receipts/allocations400+600, reversal400 and accounting integration are proved. Real money, fiscal receipts and bank reconciliation are excluded."
},
{
"id": "general_ledger",
"owner": "accounting",
"effect": "balanced_journal_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "One QA writer covers supplier, sales/receivables, direct/industrial costs and their approved corrections; joint11 journals/23 lines gross8725 remains its own proof. A separate authorised physical-stock book adds entry100/issue50/return25, three journals/six lines gross175, stock75 and period close. No duplicated material cost: hybrid direct/industrial-stock composition remains excluded. SGF observes the canonical stock book; stock confirmations run in its native QA composition. Real chart/tax/valuation/payroll policy, further corrections, reopening, operational cutover and deployment remain pending."
}
],
"checks": {
"source_paths_and_hashes": true,
"single_owner_per_stage": true,
"mandatory_dependency_graph_acyclic": true,
"planned_consumers_explicit": true
},
"limitations": [
"Source existence is not execution, parity, acceptance or deployment evidence.",
"Dependencies represent the selected synthetic path, not universal product eligibility rules.",
"No stage transition engine, inventory adapter or journal engine implemented by this inventory."
],
"preservation": {
"database_connections": 0,
"source_execution": false,
"application_routes_changed": false,
"rights_changed": false,
"protected_six_records_untouched": true,
"blocked_cache_untouched": true,
"demos_changed": false,
"purchasing_activated": false,
"publication": false,
"checkpoint": false
},
"visual_review_pending": true,
"deployment_capacity_validated": false
}
@@ -0,0 +1,370 @@
{
"id": "SGF-MODULE-FLOW-PREPARATION-v1",
"date": "2026-11-02",
"kind": "static_preparation_inventory",
"plan_sha256": "6f8270c0376b207bf592a405d6223f4b690d98b6b083194355df93cf256895f3",
"sources": [
{
"id": "requisitions_delivery",
"repository": "sgf",
"path": "docs/SGF_REQUISITIONS_8039_DELIVERY.md",
"sha256": "9c0bc172b91314c54e67ac1f547ce64cf2ce97d2df285172ad5d99eee554b167",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_workflow",
"repository": "compras",
"path": "app/Services/ReceiptWorkflow.php",
"sha256": "a7325d4fdb09d1767d0d4fa3661bcf9b254e8506285080d6063bbed487bb522c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_workflow",
"repository": "compras",
"path": "app/Services/StockWorkflow.php",
"sha256": "18ddaa075432b84c0b0ee5241ff56ab9de9aa8e8db4e6132693bc7fd904b3a58",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_controller",
"repository": "compras",
"path": "app/Http/Controllers/StockController.php",
"sha256": "79aa0f96da7b8290b23489bdaa5c45a4d9f122483dbc0b4132793f76e4f97d0b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_lots",
"repository": "compras",
"path": "app/Services/InventoryLots.php",
"sha256": "911a0ce691c58ec1f635260e875ff8d4acfa2a45eecbf74b59b254b3d9209b52",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_counts",
"repository": "compras",
"path": "app/Services/InventoryCounts.php",
"sha256": "0c1b0d5e795a15b4d762c47fcdbeb19f225aa933b4507938f310ff25026afa11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_dispositions",
"repository": "compras",
"path": "app/Services/InventoryDispositions.php",
"sha256": "35a05ed9d6e2cb96a38c1d9b8cb02631bae000a9ac9633dbb53025ceb611983c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reversals",
"repository": "compras",
"path": "app/Services/InventoryReversals.php",
"sha256": "d1712029d7cedda6fbc9b0562bc108ebf8fb235d7aeb2bca4158639d3fc9a2a2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "warehouse_reservations",
"repository": "compras",
"path": "app/Services/WarehouseReservations.php",
"sha256": "3120eaf6d9c8cedf3c991edcb41133f5107ca62736cea7e082ae4773755ffb54",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_menu",
"repository": "sgf",
"path": "resources/js/stock-menu.js",
"sha256": "776360166b0fdacad343853eb335044306f078acb8da1439715010b4713dc4ff",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "invoice_workflow",
"repository": "compras",
"path": "app/Services/InvoiceWorkflow.php",
"sha256": "f1e8530315e33d3c8eb23752699b3bbcba0af5248af478e861f3b3e75a462c11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "supplier_adapter",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierPayables.php",
"sha256": "c17d44391cbd96941aa2dd2eac2cb167508faf6453c6a1e86333846df1ba18b9",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "payables",
"repository": "sgf",
"path": "packages/payables/src/Payables.php",
"sha256": "e9ffd3e870f68187b53dacd44e47be24165e4da63cea114f8b5ca312e900c353",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlements",
"repository": "sgf",
"path": "packages/payables/src/SupplierSettlements.php",
"sha256": "6d090142dc4625a47d3cdeb09dcaa482a80bbc58c945d429e340888b792e3492",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlement_delivery",
"repository": "sgf",
"path": "docs/SUPPLIER_SETTLEMENT_DELIVERY.md",
"sha256": "46d9836e70b17a78acb2230f76122de38096384e55b4b2f5298aa9c73ab1fd20",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_workflow",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopWorkflow.php",
"sha256": "a09d7c14c7101c36a2539f346494584340493a56ca951c7b1e66418f43d80adb",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "direct_costs",
"repository": "sgf",
"path": "app/Modules/Workshop/DirectCosts.php",
"sha256": "51f70a18731ed6371442f8e6364c52b163f46bf9b58c86b407b73f39fffb164c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_costs",
"repository": "sgf",
"path": "app/Modules/Industry/IndustrialCosts.php",
"sha256": "55ad20b756d94d3d734886f8a6aae157a32916735f8af9fb6a3a5c69859beb45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_billing",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopBilling.php",
"sha256": "039fdfdab77a8856b070249e028894a740222199969cabd614bfaab0c9e5a2d2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_invoicing",
"repository": "sgf",
"path": "app/Modules/Services/ServiceInvoicing.php",
"sha256": "b5ac9898f2089fad7799b9e62e5ce5db6df7fd64643e8e7e3b52c6a0e2d142a8",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_receivables",
"repository": "sgf",
"path": "app/Modules/Services/ServiceReceivables.php",
"sha256": "725bc8773a78cfd05dd0a729d885a97c0eef43854ca7ab4210b4d5e80d5d54ec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "catalogue_accounting",
"repository": "sgf",
"path": "app/Modules/Services/CatalogueAccounting.php",
"sha256": "15e72188334a0c6e9b65050e9609ac1c50a924899a753d47557e3375017e5d1c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "accounting_menu",
"repository": "sgf",
"path": "docs/ACCOUNTING_MENU_DELIVERY.md",
"sha256": "d2c72d3e1ba5256720a00520ea18fe5e2b9664517d7c8639e64dfbad00aebb40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_core",
"repository": "sgf",
"path": "packages/general-ledger/src/PayableJournal.php",
"sha256": "6a2fbb1fecebbaeeb6511557a116bf17e1a5daa2bd8ed389e777ec9ecd822c66",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_adapter",
"repository": "sgf",
"path": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "92980788fff94f1b66b18dbb4fcefdc9185a86626ac97df8116eea4c4eeced7e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_DELIVERY.md",
"sha256": "e8aea14f18da04a407ae2a225c5537f133394b830fb059a233ad4367d976007f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_core",
"repository": "sgf",
"path": "packages/general-ledger/src/LedgerCycle.php",
"sha256": "5040369c2fc24ef713e758e5d4d1241fc52b8bef421ea7bf45855000f755d524",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_native_adapter",
"repository": "compras",
"path": "app/Services/GeneralLedger.php",
"sha256": "fc80b20ad0ab2dac1c8df4b535349d05b416f1c5f2eec3e7718eda51f6626485",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_COMPLETE_CYCLE_DELIVERY.md",
"sha256": "424a6d9de6f3a02c4ff691df7e045cbf1fd42838bf20c03cca61dcc79c390b2d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_source",
"repository": "sgf",
"path": "app/Modules/Accounting/IndustrialLedgerSource.php",
"sha256": "2479bfd33182fdd918b14748ca9e00e8c789a127bf1746651c8f8f7d53205024",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_workspace",
"repository": "sgf",
"path": "resources/views/accounting/industrial-ledger.blade.php",
"sha256": "17568eb8e7391a0486ac8e45fda9716f817636d1832658b4969cdc6a123f058b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_DELIVERY.md",
"sha256": "70c03e5093b349b81aef3132223dfcca440037ab2ab64ae48be28ec72f4c356f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_correction_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_CORRECTION_DELIVERY.md",
"sha256": "a9040aa59528af4acf5ac211d24d43624ee67ec03715ff128bceb56a8cad671b",
"meaning": "source_present_only_not_operational_proof"
}
],
"stages": [
{
"id": "requisition_order",
"owner": "purchasing",
"effect": "approved_procurement_origin",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Only basic requisitions demonstrated in 8039; full procurement composition not transferred."
},
{
"id": "accepted_receipt",
"owner": "purchasing",
"effect": "accepted_physical_receipt",
"state": "source_not_integrated",
"operational_integration_validated": false,
"gap": "No common SGF receipt/stock adapter demonstrated."
},
{
"id": "physical_stock",
"owner": "stock",
"effect": "physical_movement_once",
"state": "source_not_integrated",
"operational_integration_validated": false,
"gap": "Common scoped reader, authoritative writer and SGF warehouse mapping pending."
},
{
"id": "supplier_invoice",
"owner": "purchasing",
"effect": "verified_supplier_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Does not assume every purchase is stock; existing eligibility/partial receipt rules must be preserved."
},
{
"id": "supplier_payable",
"owner": "finance",
"effect": "supplier_obligation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Synthetic core exists; common operational composition and historical source mapping remain delimited."
},
{
"id": "supplier_settlement",
"owner": "finance",
"effect": "confirmed_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Synthetic payments/allocations exist; no bank execution or complete bank reconciliation delivered."
},
{
"id": "workshop_execution",
"owner": "workshop",
"effect": "verified_work_record",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Verified observations exist; no automatic physical stock movement."
},
{
"id": "workshop_stock_consumption",
"owner": "stock",
"effect": "company_material_consumption_once",
"state": "planned",
"operational_integration_validated": false,
"gap": "Linking observed material to a physical movement is not implemented; do not replay old observations."
},
{
"id": "verified_cost",
"owner": "finance",
"effect": "validated_cost_version",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Current costs are synthetic; physical movement linkage is future and absence of rate stays visible."
},
{
"id": "sales_draft",
"owner": "commercial",
"effect": "commercial_draft_from_unique_origins",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Draft integration exists; cost is not sale price and draft does not decrement stock."
},
{
"id": "sales_invoice",
"owner": "commercial",
"effect": "issued_sales_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Test issuance exists; real fiscal issuance remains guarded. Direct service origins remain valid."
},
{
"id": "customer_receivable",
"owner": "finance",
"effect": "customer_receipt_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Synthetic receipts exist; fiscal receipt/bank reconciliation not presumed."
},
{
"id": "general_ledger",
"owner": "accounting",
"effect": "balanced_journal_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Authorised QA source effects use one writer: supplier recognition/settlement/correction, sales and receivable allocations/reversal, direct cost and its correction, industrial result1800 and its explicit atomic correction to1820 with residual300 excluded. New corrected SGF composition reconciles11 journals/23 lines and gross8725 with joint reviewed close. Real chart/tax policy, stock valuation, payroll, additional correction chains, reopening, historical/operational cutover and deployment remain excluded."
}
],
"checks": {
"source_paths_and_hashes": true,
"single_owner_per_stage": true,
"mandatory_dependency_graph_acyclic": true,
"planned_consumers_explicit": true
},
"limitations": [
"Source existence is not execution, parity, acceptance or deployment evidence.",
"Dependencies represent the selected synthetic path, not universal product eligibility rules.",
"No stage transition engine, inventory adapter or journal engine implemented by this inventory."
],
"preservation": {
"database_connections": 0,
"source_execution": false,
"application_routes_changed": false,
"rights_changed": false,
"protected_six_records_untouched": true,
"blocked_cache_untouched": true,
"demos_changed": false,
"purchasing_activated": false,
"publication": false,
"checkpoint": false
},
"visual_review_pending": true,
"deployment_capacity_validated": false
}
@@ -0,0 +1,363 @@
{
"id": "SGF-MODULE-FLOW-PREPARATION-v1",
"date": "2026-11-02",
"kind": "static_preparation_inventory",
"plan_sha256": "49c5c87cc1f7cbf63dadabdc81d92a8a04a98615d0c86d2acb6d097923c4c615",
"sources": [
{
"id": "requisitions_delivery",
"repository": "sgf",
"path": "docs/SGF_REQUISITIONS_8039_DELIVERY.md",
"sha256": "9c0bc172b91314c54e67ac1f547ce64cf2ce97d2df285172ad5d99eee554b167",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_workflow",
"repository": "compras",
"path": "app/Services/ReceiptWorkflow.php",
"sha256": "a7325d4fdb09d1767d0d4fa3661bcf9b254e8506285080d6063bbed487bb522c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_workflow",
"repository": "compras",
"path": "app/Services/StockWorkflow.php",
"sha256": "18ddaa075432b84c0b0ee5241ff56ab9de9aa8e8db4e6132693bc7fd904b3a58",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_controller",
"repository": "compras",
"path": "app/Http/Controllers/StockController.php",
"sha256": "79aa0f96da7b8290b23489bdaa5c45a4d9f122483dbc0b4132793f76e4f97d0b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_lots",
"repository": "compras",
"path": "app/Services/InventoryLots.php",
"sha256": "911a0ce691c58ec1f635260e875ff8d4acfa2a45eecbf74b59b254b3d9209b52",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_counts",
"repository": "compras",
"path": "app/Services/InventoryCounts.php",
"sha256": "0c1b0d5e795a15b4d762c47fcdbeb19f225aa933b4507938f310ff25026afa11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_dispositions",
"repository": "compras",
"path": "app/Services/InventoryDispositions.php",
"sha256": "35a05ed9d6e2cb96a38c1d9b8cb02631bae000a9ac9633dbb53025ceb611983c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reversals",
"repository": "compras",
"path": "app/Services/InventoryReversals.php",
"sha256": "d1712029d7cedda6fbc9b0562bc108ebf8fb235d7aeb2bca4158639d3fc9a2a2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "warehouse_reservations",
"repository": "compras",
"path": "app/Services/WarehouseReservations.php",
"sha256": "3120eaf6d9c8cedf3c991edcb41133f5107ca62736cea7e082ae4773755ffb54",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_menu",
"repository": "sgf",
"path": "resources/js/stock-menu.js",
"sha256": "776360166b0fdacad343853eb335044306f078acb8da1439715010b4713dc4ff",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "invoice_workflow",
"repository": "compras",
"path": "app/Services/InvoiceWorkflow.php",
"sha256": "f1e8530315e33d3c8eb23752699b3bbcba0af5248af478e861f3b3e75a462c11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "supplier_adapter",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierPayables.php",
"sha256": "5a07462a3f4cc06776fce3da98b42b188f26f1f32c3c7cb4bc37d46408b3be17",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "payables",
"repository": "sgf",
"path": "packages/payables/src/Payables.php",
"sha256": "cfd3f1c77c108b725e9328b5bfe4839483c6b27483ceb6182c1fdf66e36e0575",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlements",
"repository": "sgf",
"path": "packages/payables/src/SupplierSettlements.php",
"sha256": "6d090142dc4625a47d3cdeb09dcaa482a80bbc58c945d429e340888b792e3492",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlement_delivery",
"repository": "sgf",
"path": "docs/SUPPLIER_SETTLEMENT_DELIVERY.md",
"sha256": "46d9836e70b17a78acb2230f76122de38096384e55b4b2f5298aa9c73ab1fd20",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_workflow",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopWorkflow.php",
"sha256": "a09d7c14c7101c36a2539f346494584340493a56ca951c7b1e66418f43d80adb",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "direct_costs",
"repository": "sgf",
"path": "app/Modules/Workshop/DirectCosts.php",
"sha256": "51f70a18731ed6371442f8e6364c52b163f46bf9b58c86b407b73f39fffb164c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_costs",
"repository": "sgf",
"path": "app/Modules/Industry/IndustrialCosts.php",
"sha256": "55ad20b756d94d3d734886f8a6aae157a32916735f8af9fb6a3a5c69859beb45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_billing",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopBilling.php",
"sha256": "039fdfdab77a8856b070249e028894a740222199969cabd614bfaab0c9e5a2d2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_invoicing",
"repository": "sgf",
"path": "app/Modules/Services/ServiceInvoicing.php",
"sha256": "b5ac9898f2089fad7799b9e62e5ce5db6df7fd64643e8e7e3b52c6a0e2d142a8",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_receivables",
"repository": "sgf",
"path": "app/Modules/Services/ServiceReceivables.php",
"sha256": "725bc8773a78cfd05dd0a729d885a97c0eef43854ca7ab4210b4d5e80d5d54ec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "catalogue_accounting",
"repository": "sgf",
"path": "app/Modules/Services/CatalogueAccounting.php",
"sha256": "15e72188334a0c6e9b65050e9609ac1c50a924899a753d47557e3375017e5d1c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "accounting_menu",
"repository": "sgf",
"path": "docs/ACCOUNTING_MENU_DELIVERY.md",
"sha256": "d2c72d3e1ba5256720a00520ea18fe5e2b9664517d7c8639e64dfbad00aebb40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_core",
"repository": "sgf",
"path": "packages/general-ledger/src/PayableJournal.php",
"sha256": "c7bd6de3ad850dbfe655c06a3f1f2d27507460260b7faa658fce4231756e9ffc",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_adapter",
"repository": "sgf",
"path": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "39cceb9ec129dc36ae272e5da07538a6e2d7be9bd536e48d4eed3c13a22045ad",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_DELIVERY.md",
"sha256": "e8aea14f18da04a407ae2a225c5537f133394b830fb059a233ad4367d976007f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_core",
"repository": "sgf",
"path": "packages/general-ledger/src/LedgerCycle.php",
"sha256": "615e993a66794ab54012c4f6b02106ce1309d31d4066437714275f064d0a68a3",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_native_adapter",
"repository": "compras",
"path": "app/Services/GeneralLedger.php",
"sha256": "fc80b20ad0ab2dac1c8df4b535349d05b416f1c5f2eec3e7718eda51f6626485",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_COMPLETE_CYCLE_DELIVERY.md",
"sha256": "424a6d9de6f3a02c4ff691df7e045cbf1fd42838bf20c03cca61dcc79c390b2d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_source",
"repository": "sgf",
"path": "app/Modules/Accounting/IndustrialLedgerSource.php",
"sha256": "7e72f7ed48dede5e8b719e906dc0ea104e1b19846f4b288632f65e4980c4662d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_workspace",
"repository": "sgf",
"path": "resources/views/accounting/industrial-ledger.blade.php",
"sha256": "d705d844582005cce3c777057075b38f8f97885b898463162163cd0d5300f90a",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_DELIVERY.md",
"sha256": "a8655379552022c561f25b519e1ba30841afac350aa66b585c237d36b78aa2be",
"meaning": "source_present_only_not_operational_proof"
}
],
"stages": [
{
"id": "requisition_order",
"owner": "purchasing",
"effect": "approved_procurement_origin",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Only basic requisitions demonstrated in 8039; full procurement composition not transferred."
},
{
"id": "accepted_receipt",
"owner": "purchasing",
"effect": "accepted_physical_receipt",
"state": "source_not_integrated",
"operational_integration_validated": false,
"gap": "No common SGF receipt/stock adapter demonstrated."
},
{
"id": "physical_stock",
"owner": "stock",
"effect": "physical_movement_once",
"state": "source_not_integrated",
"operational_integration_validated": false,
"gap": "Common scoped reader, authoritative writer and SGF warehouse mapping pending."
},
{
"id": "supplier_invoice",
"owner": "purchasing",
"effect": "verified_supplier_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Does not assume every purchase is stock; existing eligibility/partial receipt rules must be preserved."
},
{
"id": "supplier_payable",
"owner": "finance",
"effect": "supplier_obligation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Synthetic core exists; common operational composition and historical source mapping remain delimited."
},
{
"id": "supplier_settlement",
"owner": "finance",
"effect": "confirmed_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Synthetic payments/allocations exist; no bank execution or complete bank reconciliation delivered."
},
{
"id": "workshop_execution",
"owner": "workshop",
"effect": "verified_work_record",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Verified observations exist; no automatic physical stock movement."
},
{
"id": "workshop_stock_consumption",
"owner": "stock",
"effect": "company_material_consumption_once",
"state": "planned",
"operational_integration_validated": false,
"gap": "Linking observed material to a physical movement is not implemented; do not replay old observations."
},
{
"id": "verified_cost",
"owner": "finance",
"effect": "validated_cost_version",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Current costs are synthetic; physical movement linkage is future and absence of rate stays visible."
},
{
"id": "sales_draft",
"owner": "commercial",
"effect": "commercial_draft_from_unique_origins",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Draft integration exists; cost is not sale price and draft does not decrement stock."
},
{
"id": "sales_invoice",
"owner": "commercial",
"effect": "issued_sales_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Test issuance exists; real fiscal issuance remains guarded. Direct service origins remain valid."
},
{
"id": "customer_receivable",
"owner": "finance",
"effect": "customer_receipt_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Synthetic receipts exist; fiscal receipt/bank reconciliation not presumed."
},
{
"id": "general_ledger",
"owner": "accounting",
"effect": "balanced_journal_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Authorised QA source effects use one writer: supplier recognition/settlement/correction, sales and receivable allocations/reversal, direct cost and its correction, industrial result1800 with residual300 excluded. New SGF composition reconciles9 journals/19 lines and gross5105 with joint reviewed close. Real chart/tax policy, stock valuation, payroll, industrial correction, reopening, historical/operational cutover and deployment remain excluded."
}
],
"checks": {
"source_paths_and_hashes": true,
"single_owner_per_stage": true,
"mandatory_dependency_graph_acyclic": true,
"planned_consumers_explicit": true
},
"limitations": [
"Source existence is not execution, parity, acceptance or deployment evidence.",
"Dependencies represent the selected synthetic path, not universal product eligibility rules.",
"No stage transition engine, inventory adapter or journal engine implemented by this inventory."
],
"preservation": {
"database_connections": 0,
"source_execution": false,
"application_routes_changed": false,
"rights_changed": false,
"protected_six_records_untouched": true,
"blocked_cache_untouched": true,
"demos_changed": false,
"purchasing_activated": false,
"publication": false,
"checkpoint": false
},
"visual_review_pending": true,
"deployment_capacity_validated": false
}
@@ -0,0 +1,342 @@
{
"id": "SGF-MODULE-FLOW-PREPARATION-v1",
"date": "2026-11-02",
"kind": "static_preparation_inventory",
"plan_sha256": "bbc7a18306d961080db1957ddbe0a68710e8780cf06449f80522077ce95b5ab5",
"sources": [
{
"id": "requisitions_delivery",
"repository": "sgf",
"path": "docs/SGF_REQUISITIONS_8039_DELIVERY.md",
"sha256": "9c0bc172b91314c54e67ac1f547ce64cf2ce97d2df285172ad5d99eee554b167",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_workflow",
"repository": "compras",
"path": "app/Services/ReceiptWorkflow.php",
"sha256": "a7325d4fdb09d1767d0d4fa3661bcf9b254e8506285080d6063bbed487bb522c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_workflow",
"repository": "compras",
"path": "app/Services/StockWorkflow.php",
"sha256": "18ddaa075432b84c0b0ee5241ff56ab9de9aa8e8db4e6132693bc7fd904b3a58",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_controller",
"repository": "compras",
"path": "app/Http/Controllers/StockController.php",
"sha256": "79aa0f96da7b8290b23489bdaa5c45a4d9f122483dbc0b4132793f76e4f97d0b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_lots",
"repository": "compras",
"path": "app/Services/InventoryLots.php",
"sha256": "911a0ce691c58ec1f635260e875ff8d4acfa2a45eecbf74b59b254b3d9209b52",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_counts",
"repository": "compras",
"path": "app/Services/InventoryCounts.php",
"sha256": "0c1b0d5e795a15b4d762c47fcdbeb19f225aa933b4507938f310ff25026afa11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_dispositions",
"repository": "compras",
"path": "app/Services/InventoryDispositions.php",
"sha256": "35a05ed9d6e2cb96a38c1d9b8cb02631bae000a9ac9633dbb53025ceb611983c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reversals",
"repository": "compras",
"path": "app/Services/InventoryReversals.php",
"sha256": "d1712029d7cedda6fbc9b0562bc108ebf8fb235d7aeb2bca4158639d3fc9a2a2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "warehouse_reservations",
"repository": "compras",
"path": "app/Services/WarehouseReservations.php",
"sha256": "3120eaf6d9c8cedf3c991edcb41133f5107ca62736cea7e082ae4773755ffb54",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_menu",
"repository": "sgf",
"path": "resources/js/stock-menu.js",
"sha256": "776360166b0fdacad343853eb335044306f078acb8da1439715010b4713dc4ff",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "invoice_workflow",
"repository": "compras",
"path": "app/Services/InvoiceWorkflow.php",
"sha256": "f1e8530315e33d3c8eb23752699b3bbcba0af5248af478e861f3b3e75a462c11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "supplier_adapter",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierPayables.php",
"sha256": "a7d956badfaa917d664cb88c3cf6afedbc1b09880c2a00ad4a98823a1cc590f7",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "payables",
"repository": "sgf",
"path": "packages/payables/src/Payables.php",
"sha256": "cfd3f1c77c108b725e9328b5bfe4839483c6b27483ceb6182c1fdf66e36e0575",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlements",
"repository": "sgf",
"path": "packages/payables/src/SupplierSettlements.php",
"sha256": "6d090142dc4625a47d3cdeb09dcaa482a80bbc58c945d429e340888b792e3492",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlement_delivery",
"repository": "sgf",
"path": "docs/SUPPLIER_SETTLEMENT_DELIVERY.md",
"sha256": "46d9836e70b17a78acb2230f76122de38096384e55b4b2f5298aa9c73ab1fd20",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_workflow",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopWorkflow.php",
"sha256": "a09d7c14c7101c36a2539f346494584340493a56ca951c7b1e66418f43d80adb",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "direct_costs",
"repository": "sgf",
"path": "app/Modules/Workshop/DirectCosts.php",
"sha256": "b6c10cb71c30361013f33a11ee8678bfa183737ed143186747793c95cd5eef95",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_costs",
"repository": "sgf",
"path": "app/Modules/Industry/IndustrialCosts.php",
"sha256": "2c63f6dcd23f751fb7dce363c415fcc2a44e7dfcb54203dc0e4af55c3e9dbf07",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_billing",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopBilling.php",
"sha256": "039fdfdab77a8856b070249e028894a740222199969cabd614bfaab0c9e5a2d2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_invoicing",
"repository": "sgf",
"path": "app/Modules/Services/ServiceInvoicing.php",
"sha256": "b5ac9898f2089fad7799b9e62e5ce5db6df7fd64643e8e7e3b52c6a0e2d142a8",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_receivables",
"repository": "sgf",
"path": "app/Modules/Services/ServiceReceivables.php",
"sha256": "fb4aab2d47c4e9e5fb1115a44e796669402b891b56ff3623db725b21b4bcf714",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "catalogue_accounting",
"repository": "sgf",
"path": "app/Modules/Services/CatalogueAccounting.php",
"sha256": "15e72188334a0c6e9b65050e9609ac1c50a924899a753d47557e3375017e5d1c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "accounting_menu",
"repository": "sgf",
"path": "docs/ACCOUNTING_MENU_DELIVERY.md",
"sha256": "d2c72d3e1ba5256720a00520ea18fe5e2b9664517d7c8639e64dfbad00aebb40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_core",
"repository": "sgf",
"path": "packages/general-ledger/src/PayableJournal.php",
"sha256": "ad688290605153e55ef64871b87b5501b7c22102e2a5d051324c04737f439825",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_adapter",
"repository": "sgf",
"path": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "f3c0994e75820919f0e008b3e532d00082ec18c531e5e10a77da565b08a0f667",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_DELIVERY.md",
"sha256": "e8aea14f18da04a407ae2a225c5537f133394b830fb059a233ad4367d976007f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_core",
"repository": "sgf",
"path": "packages/general-ledger/src/LedgerCycle.php",
"sha256": "0096c76526c4c67c49b7a1746c2351027ed478c23eb0454f4d4aa7274f256826",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_native_adapter",
"repository": "compras",
"path": "app/Services/GeneralLedger.php",
"sha256": "e86a54f359b428afe9f3352e80c69342bb24a2e389d3c6286323fbce226e0ffe",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_COMPLETE_CYCLE_DELIVERY.md",
"sha256": "424a6d9de6f3a02c4ff691df7e045cbf1fd42838bf20c03cca61dcc79c390b2d",
"meaning": "source_present_only_not_operational_proof"
}
],
"stages": [
{
"id": "requisition_order",
"owner": "purchasing",
"effect": "approved_procurement_origin",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Only basic requisitions demonstrated in 8039; full procurement composition not transferred."
},
{
"id": "accepted_receipt",
"owner": "purchasing",
"effect": "accepted_physical_receipt",
"state": "source_not_integrated",
"operational_integration_validated": false,
"gap": "No common SGF receipt/stock adapter demonstrated."
},
{
"id": "physical_stock",
"owner": "stock",
"effect": "physical_movement_once",
"state": "source_not_integrated",
"operational_integration_validated": false,
"gap": "Common scoped reader, authoritative writer and SGF warehouse mapping pending."
},
{
"id": "supplier_invoice",
"owner": "purchasing",
"effect": "verified_supplier_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Does not assume every purchase is stock; existing eligibility/partial receipt rules must be preserved."
},
{
"id": "supplier_payable",
"owner": "finance",
"effect": "supplier_obligation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Synthetic core exists; common operational composition and historical source mapping remain delimited."
},
{
"id": "supplier_settlement",
"owner": "finance",
"effect": "confirmed_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Synthetic payments/allocations exist; no bank execution or complete bank reconciliation delivered."
},
{
"id": "workshop_execution",
"owner": "workshop",
"effect": "verified_work_record",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Verified observations exist; no automatic physical stock movement."
},
{
"id": "workshop_stock_consumption",
"owner": "stock",
"effect": "company_material_consumption_once",
"state": "planned",
"operational_integration_validated": false,
"gap": "Linking observed material to a physical movement is not implemented; do not replay old observations."
},
{
"id": "verified_cost",
"owner": "finance",
"effect": "validated_cost_version",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Current costs are synthetic; physical movement linkage is future and absence of rate stays visible."
},
{
"id": "sales_draft",
"owner": "commercial",
"effect": "commercial_draft_from_unique_origins",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Draft integration exists; cost is not sale price and draft does not decrement stock."
},
{
"id": "sales_invoice",
"owner": "commercial",
"effect": "issued_sales_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Test issuance exists; real fiscal issuance remains guarded. Direct service origins remain valid."
},
{
"id": "customer_receivable",
"owner": "finance",
"effect": "customer_receipt_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Synthetic receipts exist; fiscal receipt/bank reconciliation not presumed."
},
{
"id": "general_ledger",
"owner": "accounting",
"effect": "balanced_journal_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Authorised synthetic cycle implemented in new SGF/SGC QA books: recognition60, confirmed allocation20 and reversal, atomic technical correction pair and reviewed QA period close. Real chart/tax policy, reopening, other source types, historical/operational cutover and deployment remain excluded."
}
],
"checks": {
"source_paths_and_hashes": true,
"single_owner_per_stage": true,
"mandatory_dependency_graph_acyclic": true,
"planned_consumers_explicit": true
},
"limitations": [
"Source existence is not execution, parity, acceptance or deployment evidence.",
"Dependencies represent the selected synthetic path, not universal product eligibility rules.",
"No stage transition engine, inventory adapter or journal engine implemented by this inventory."
],
"preservation": {
"database_connections": 0,
"source_execution": false,
"application_routes_changed": false,
"rights_changed": false,
"protected_six_records_untouched": true,
"blocked_cache_untouched": true,
"demos_changed": false,
"purchasing_activated": false,
"publication": false,
"checkpoint": false
},
"visual_review_pending": true,
"deployment_capacity_validated": false
}
@@ -0,0 +1,321 @@
{
"id": "SGF-MODULE-FLOW-PREPARATION-v1",
"date": "2026-11-02",
"kind": "static_preparation_inventory",
"plan_sha256": "f1386de7b80c720fde48937face5551cd34eb74ef95f98adf041bf765cd8d025",
"sources": [
{
"id": "requisitions_delivery",
"repository": "sgf",
"path": "docs/SGF_REQUISITIONS_8039_DELIVERY.md",
"sha256": "9c0bc172b91314c54e67ac1f547ce64cf2ce97d2df285172ad5d99eee554b167",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_workflow",
"repository": "compras",
"path": "app/Services/ReceiptWorkflow.php",
"sha256": "a7325d4fdb09d1767d0d4fa3661bcf9b254e8506285080d6063bbed487bb522c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_workflow",
"repository": "compras",
"path": "app/Services/StockWorkflow.php",
"sha256": "18ddaa075432b84c0b0ee5241ff56ab9de9aa8e8db4e6132693bc7fd904b3a58",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_controller",
"repository": "compras",
"path": "app/Http/Controllers/StockController.php",
"sha256": "79aa0f96da7b8290b23489bdaa5c45a4d9f122483dbc0b4132793f76e4f97d0b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_lots",
"repository": "compras",
"path": "app/Services/InventoryLots.php",
"sha256": "4b4db26b7781ef63291e58065c5704324ff26afd48dfbed45ed9db9d54d115bf",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_counts",
"repository": "compras",
"path": "app/Services/InventoryCounts.php",
"sha256": "0c1b0d5e795a15b4d762c47fcdbeb19f225aa933b4507938f310ff25026afa11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_dispositions",
"repository": "compras",
"path": "app/Services/InventoryDispositions.php",
"sha256": "35a05ed9d6e2cb96a38c1d9b8cb02631bae000a9ac9633dbb53025ceb611983c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reversals",
"repository": "compras",
"path": "app/Services/InventoryReversals.php",
"sha256": "d1712029d7cedda6fbc9b0562bc108ebf8fb235d7aeb2bca4158639d3fc9a2a2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "warehouse_reservations",
"repository": "compras",
"path": "app/Services/WarehouseReservations.php",
"sha256": "3120eaf6d9c8cedf3c991edcb41133f5107ca62736cea7e082ae4773755ffb54",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_menu",
"repository": "sgf",
"path": "resources/js/stock-menu.js",
"sha256": "776360166b0fdacad343853eb335044306f078acb8da1439715010b4713dc4ff",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "invoice_workflow",
"repository": "compras",
"path": "app/Services/InvoiceWorkflow.php",
"sha256": "f1e8530315e33d3c8eb23752699b3bbcba0af5248af478e861f3b3e75a462c11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "supplier_adapter",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierPayables.php",
"sha256": "a7d956badfaa917d664cb88c3cf6afedbc1b09880c2a00ad4a98823a1cc590f7",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "payables",
"repository": "sgf",
"path": "packages/payables/src/Payables.php",
"sha256": "cfd3f1c77c108b725e9328b5bfe4839483c6b27483ceb6182c1fdf66e36e0575",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlements",
"repository": "sgf",
"path": "packages/payables/src/SupplierSettlements.php",
"sha256": "6d090142dc4625a47d3cdeb09dcaa482a80bbc58c945d429e340888b792e3492",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlement_delivery",
"repository": "sgf",
"path": "docs/SUPPLIER_SETTLEMENT_DELIVERY.md",
"sha256": "46d9836e70b17a78acb2230f76122de38096384e55b4b2f5298aa9c73ab1fd20",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_workflow",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopWorkflow.php",
"sha256": "a09d7c14c7101c36a2539f346494584340493a56ca951c7b1e66418f43d80adb",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "direct_costs",
"repository": "sgf",
"path": "app/Modules/Workshop/DirectCosts.php",
"sha256": "b6c10cb71c30361013f33a11ee8678bfa183737ed143186747793c95cd5eef95",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_costs",
"repository": "sgf",
"path": "app/Modules/Industry/IndustrialCosts.php",
"sha256": "2c63f6dcd23f751fb7dce363c415fcc2a44e7dfcb54203dc0e4af55c3e9dbf07",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_billing",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopBilling.php",
"sha256": "039fdfdab77a8856b070249e028894a740222199969cabd614bfaab0c9e5a2d2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_invoicing",
"repository": "sgf",
"path": "app/Modules/Services/ServiceInvoicing.php",
"sha256": "b5ac9898f2089fad7799b9e62e5ce5db6df7fd64643e8e7e3b52c6a0e2d142a8",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_receivables",
"repository": "sgf",
"path": "app/Modules/Services/ServiceReceivables.php",
"sha256": "fb4aab2d47c4e9e5fb1115a44e796669402b891b56ff3623db725b21b4bcf714",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "catalogue_accounting",
"repository": "sgf",
"path": "app/Modules/Services/CatalogueAccounting.php",
"sha256": "15e72188334a0c6e9b65050e9609ac1c50a924899a753d47557e3375017e5d1c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "accounting_menu",
"repository": "sgf",
"path": "docs/ACCOUNTING_MENU_DELIVERY.md",
"sha256": "d2c72d3e1ba5256720a00520ea18fe5e2b9664517d7c8639e64dfbad00aebb40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_core",
"repository": "sgf",
"path": "packages/general-ledger/src/PayableJournal.php",
"sha256": "96f01292bea51228ce7ec317708147a7d5d6a14dc2a97254be9b19b0dbe7099b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_adapter",
"repository": "sgf",
"path": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "e455092f25ee58d1493219d6a5ea8051929d5f2940132777a476673bf7b2b9f7",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_DELIVERY.md",
"sha256": "872a64e15d1788e4b1d68eccb3045c6b1d5df88c1e81058719a21d03bd298aa4",
"meaning": "source_present_only_not_operational_proof"
}
],
"stages": [
{
"id": "requisition_order",
"owner": "purchasing",
"effect": "approved_procurement_origin",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Only basic requisitions demonstrated in 8039; full procurement composition not transferred."
},
{
"id": "accepted_receipt",
"owner": "purchasing",
"effect": "accepted_physical_receipt",
"state": "source_not_integrated",
"operational_integration_validated": false,
"gap": "No common SGF receipt/stock adapter demonstrated."
},
{
"id": "physical_stock",
"owner": "stock",
"effect": "physical_movement_once",
"state": "source_not_integrated",
"operational_integration_validated": false,
"gap": "Common scoped reader, authoritative writer and SGF warehouse mapping pending."
},
{
"id": "supplier_invoice",
"owner": "purchasing",
"effect": "verified_supplier_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Does not assume every purchase is stock; existing eligibility/partial receipt rules must be preserved."
},
{
"id": "supplier_payable",
"owner": "finance",
"effect": "supplier_obligation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Synthetic core exists; common operational composition and historical source mapping remain delimited."
},
{
"id": "supplier_settlement",
"owner": "finance",
"effect": "confirmed_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Synthetic payments/allocations exist; no bank execution or complete bank reconciliation delivered."
},
{
"id": "workshop_execution",
"owner": "workshop",
"effect": "verified_work_record",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Verified observations exist; no automatic physical stock movement."
},
{
"id": "workshop_stock_consumption",
"owner": "stock",
"effect": "company_material_consumption_once",
"state": "planned",
"operational_integration_validated": false,
"gap": "Linking observed material to a physical movement is not implemented; do not replay old observations."
},
{
"id": "verified_cost",
"owner": "finance",
"effect": "validated_cost_version",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Current costs are synthetic; physical movement linkage is future and absence of rate stays visible."
},
{
"id": "sales_draft",
"owner": "commercial",
"effect": "commercial_draft_from_unique_origins",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Draft integration exists; cost is not sale price and draft does not decrement stock."
},
{
"id": "sales_invoice",
"owner": "commercial",
"effect": "issued_sales_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Test issuance exists; real fiscal issuance remains guarded. Direct service origins remain valid."
},
{
"id": "customer_receivable",
"owner": "finance",
"effect": "customer_receipt_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Synthetic receipts exist; fiscal receipt/bank reconciliation not presumed."
},
{
"id": "general_ledger",
"owner": "accounting",
"effect": "balanced_journal_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "First 60 MZN payable recognition journal and two-account extract implemented only in a new isolated SGF QA composition. Real accounting eligibility/chart, native composition, historical posting, correction, closing, full reports and deployment remain excluded."
}
],
"checks": {
"source_paths_and_hashes": true,
"single_owner_per_stage": true,
"mandatory_dependency_graph_acyclic": true,
"planned_consumers_explicit": true
},
"limitations": [
"Source existence is not execution, parity, acceptance or deployment evidence.",
"Dependencies represent the selected synthetic path, not universal product eligibility rules.",
"No stage transition engine, inventory adapter or journal engine implemented by this inventory."
],
"preservation": {
"database_connections": 0,
"source_execution": false,
"application_routes_changed": false,
"rights_changed": false,
"protected_six_records_untouched": true,
"blocked_cache_untouched": true,
"demos_changed": false,
"purchasing_activated": false,
"publication": false,
"checkpoint": false
},
"visual_review_pending": true,
"deployment_capacity_validated": false
}
@@ -0,0 +1,370 @@
{
"id": "SGF-MODULE-FLOW-PREPARATION-v1",
"date": "2026-11-02",
"kind": "static_preparation_inventory",
"plan_sha256": "bfe30fc7040f9177beb88ab3d42115b96a075add8d30b1daa3fd8e3f5b20172a",
"sources": [
{
"id": "requisitions_delivery",
"repository": "sgf",
"path": "docs/SGF_REQUISITIONS_8039_DELIVERY.md",
"sha256": "9c0bc172b91314c54e67ac1f547ce64cf2ce97d2df285172ad5d99eee554b167",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_workflow",
"repository": "compras",
"path": "app/Services/ReceiptWorkflow.php",
"sha256": "a7325d4fdb09d1767d0d4fa3661bcf9b254e8506285080d6063bbed487bb522c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_workflow",
"repository": "compras",
"path": "app/Services/StockWorkflow.php",
"sha256": "18ddaa075432b84c0b0ee5241ff56ab9de9aa8e8db4e6132693bc7fd904b3a58",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_controller",
"repository": "compras",
"path": "app/Http/Controllers/StockController.php",
"sha256": "79aa0f96da7b8290b23489bdaa5c45a4d9f122483dbc0b4132793f76e4f97d0b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_lots",
"repository": "compras",
"path": "app/Services/InventoryLots.php",
"sha256": "911a0ce691c58ec1f635260e875ff8d4acfa2a45eecbf74b59b254b3d9209b52",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_counts",
"repository": "compras",
"path": "app/Services/InventoryCounts.php",
"sha256": "0c1b0d5e795a15b4d762c47fcdbeb19f225aa933b4507938f310ff25026afa11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_dispositions",
"repository": "compras",
"path": "app/Services/InventoryDispositions.php",
"sha256": "35a05ed9d6e2cb96a38c1d9b8cb02631bae000a9ac9633dbb53025ceb611983c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reversals",
"repository": "compras",
"path": "app/Services/InventoryReversals.php",
"sha256": "d1712029d7cedda6fbc9b0562bc108ebf8fb235d7aeb2bca4158639d3fc9a2a2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "warehouse_reservations",
"repository": "compras",
"path": "app/Services/WarehouseReservations.php",
"sha256": "3120eaf6d9c8cedf3c991edcb41133f5107ca62736cea7e082ae4773755ffb54",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_menu",
"repository": "sgf",
"path": "resources/js/stock-menu.js",
"sha256": "776360166b0fdacad343853eb335044306f078acb8da1439715010b4713dc4ff",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "invoice_workflow",
"repository": "compras",
"path": "app/Services/InvoiceWorkflow.php",
"sha256": "f1e8530315e33d3c8eb23752699b3bbcba0af5248af478e861f3b3e75a462c11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "supplier_adapter",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierPayables.php",
"sha256": "c17d44391cbd96941aa2dd2eac2cb167508faf6453c6a1e86333846df1ba18b9",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "payables",
"repository": "sgf",
"path": "packages/payables/src/Payables.php",
"sha256": "ed853f3eb48ebcf91f51a8fe9ed8e49b0e1bc30cce4852cc9394d51cff28c74d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlements",
"repository": "sgf",
"path": "packages/payables/src/SupplierSettlements.php",
"sha256": "1238c8abe950ca9c88746bb020a85392b7e42e8d7e3c8d86f0a5f79015f9ddfe",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlement_delivery",
"repository": "sgf",
"path": "docs/SUPPLIER_SETTLEMENT_DELIVERY.md",
"sha256": "46d9836e70b17a78acb2230f76122de38096384e55b4b2f5298aa9c73ab1fd20",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_workflow",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopWorkflow.php",
"sha256": "a09d7c14c7101c36a2539f346494584340493a56ca951c7b1e66418f43d80adb",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "direct_costs",
"repository": "sgf",
"path": "app/Modules/Workshop/DirectCosts.php",
"sha256": "51f70a18731ed6371442f8e6364c52b163f46bf9b58c86b407b73f39fffb164c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_costs",
"repository": "sgf",
"path": "app/Modules/Industry/IndustrialCosts.php",
"sha256": "55ad20b756d94d3d734886f8a6aae157a32916735f8af9fb6a3a5c69859beb45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_billing",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopBilling.php",
"sha256": "039fdfdab77a8856b070249e028894a740222199969cabd614bfaab0c9e5a2d2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_invoicing",
"repository": "sgf",
"path": "app/Modules/Services/ServiceInvoicing.php",
"sha256": "b5ac9898f2089fad7799b9e62e5ce5db6df7fd64643e8e7e3b52c6a0e2d142a8",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_receivables",
"repository": "sgf",
"path": "app/Modules/Services/ServiceReceivables.php",
"sha256": "725bc8773a78cfd05dd0a729d885a97c0eef43854ca7ab4210b4d5e80d5d54ec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "catalogue_accounting",
"repository": "sgf",
"path": "app/Modules/Services/CatalogueAccounting.php",
"sha256": "15e72188334a0c6e9b65050e9609ac1c50a924899a753d47557e3375017e5d1c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "accounting_menu",
"repository": "sgf",
"path": "docs/ACCOUNTING_MENU_DELIVERY.md",
"sha256": "d2c72d3e1ba5256720a00520ea18fe5e2b9664517d7c8639e64dfbad00aebb40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_core",
"repository": "sgf",
"path": "packages/general-ledger/src/PayableJournal.php",
"sha256": "aa1d622759e647d21df66164a0582473f2c1daac95cd69f5c0f712a6fd6753d2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_adapter",
"repository": "sgf",
"path": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "a87d2ea373bc61bb139aa29f2a354b9813bbb2d6229a389f8d37fd8e9890edec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_DELIVERY.md",
"sha256": "e8aea14f18da04a407ae2a225c5537f133394b830fb059a233ad4367d976007f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_core",
"repository": "sgf",
"path": "packages/general-ledger/src/LedgerCycle.php",
"sha256": "5040369c2fc24ef713e758e5d4d1241fc52b8bef421ea7bf45855000f755d524",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_native_adapter",
"repository": "compras",
"path": "app/Services/GeneralLedger.php",
"sha256": "fc80b20ad0ab2dac1c8df4b535349d05b416f1c5f2eec3e7718eda51f6626485",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_COMPLETE_CYCLE_DELIVERY.md",
"sha256": "424a6d9de6f3a02c4ff691df7e045cbf1fd42838bf20c03cca61dcc79c390b2d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_source",
"repository": "sgf",
"path": "app/Modules/Accounting/IndustrialLedgerSource.php",
"sha256": "2479bfd33182fdd918b14748ca9e00e8c789a127bf1746651c8f8f7d53205024",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_workspace",
"repository": "sgf",
"path": "resources/views/accounting/industrial-ledger.blade.php",
"sha256": "989ad6272fd14b681ca0000196dada276de0904f5ae69e4338f65e7e8cc5af45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_DELIVERY.md",
"sha256": "70c03e5093b349b81aef3132223dfcca440037ab2ab64ae48be28ec72f4c356f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_correction_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_CORRECTION_DELIVERY.md",
"sha256": "a9040aa59528af4acf5ac211d24d43624ee67ec03715ff128bceb56a8cad671b",
"meaning": "source_present_only_not_operational_proof"
}
],
"stages": [
{
"id": "requisition_order",
"owner": "purchasing",
"effect": "approved_procurement_origin",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Only basic requisitions demonstrated in 8039; full procurement composition not transferred."
},
{
"id": "accepted_receipt",
"owner": "purchasing",
"effect": "accepted_physical_receipt",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Native receipt workflow delegates once to the shared writer; SGF observes the actual movement in QA. Preparing/confirming receipts in the SGF interface and an installed procurement composition remain pending."
},
{
"id": "physical_stock",
"owner": "stock",
"effect": "physical_movement_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Shared paged reader works in both QA hosts, with source revisions and explicit bindings. Operational bindings/installation and stock valuation remain pending; missing source is not zero."
},
{
"id": "supplier_invoice",
"owner": "purchasing",
"effect": "verified_supplier_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Native verified invoice participates in common payable QA; SGF history remains a controlled receipt, not a live historical adapter. Real fiscal policy and installed procurement composition remain separate."
},
{
"id": "supplier_payable",
"owner": "finance",
"effect": "supplier_obligation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Common recognition, controlled history, report and receipt lookup are implemented in QA. Due date stays unknown when absent; operational history responsibility/source mapping and cutover remain pending."
},
{
"id": "supplier_settlement",
"owner": "finance",
"effect": "confirmed_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA confirmation/allocation/reversal and scoped receipt lookup exist; no bank execution, real reconciliation or live historical SGF cutover is delivered."
},
{
"id": "workshop_execution",
"owner": "workshop",
"effect": "verified_work_record",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Verified observations exist; no automatic physical stock movement."
},
{
"id": "workshop_stock_consumption",
"owner": "stock",
"effect": "company_material_consumption_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA issue, existing delivery link, partial allocations, returns and proposal withdrawal/rejection are implemented with explicit review and no duplicate movement. Native warehouse return and SGF observation have separate proof. Operational item/warehouse mappings and installed composition remain pending."
},
{
"id": "verified_cost",
"owner": "finance",
"effect": "validated_cost_version",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Current costs are synthetic; physical movement linkage is future and absence of rate stays visible."
},
{
"id": "sales_draft",
"owner": "commercial",
"effect": "commercial_draft_from_unique_origins",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Draft integration exists; cost is not sale price and draft does not decrement stock."
},
{
"id": "sales_invoice",
"owner": "commercial",
"effect": "issued_sales_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Actual test issuance and QA accounting recognition are proved. Real fiscal issuance/compliance remains guarded."
},
{
"id": "customer_receivable",
"owner": "finance",
"effect": "customer_receipt_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA opening, confirmed receipts/allocations400+600, reversal400 and accounting integration are proved. Real money, fiscal receipts and bank reconciliation are excluded."
},
{
"id": "general_ledger",
"owner": "accounting",
"effect": "balanced_journal_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Authorised QA source effects use one writer: supplier recognition/settlement/correction, sales and receivable allocations/reversal, direct cost and its correction, industrial result1800 and its explicit atomic correction to1820 with residual300 excluded. New corrected SGF composition reconciles11 journals/23 lines and gross8725 with joint reviewed close. Real chart/tax policy, stock valuation, payroll, additional correction chains, reopening, historical/operational cutover and deployment remain excluded."
}
],
"checks": {
"source_paths_and_hashes": true,
"single_owner_per_stage": true,
"mandatory_dependency_graph_acyclic": true,
"planned_consumers_explicit": true
},
"limitations": [
"Source existence is not execution, parity, acceptance or deployment evidence.",
"Dependencies represent the selected synthetic path, not universal product eligibility rules.",
"No stage transition engine, inventory adapter or journal engine implemented by this inventory."
],
"preservation": {
"database_connections": 0,
"source_execution": false,
"application_routes_changed": false,
"rights_changed": false,
"protected_six_records_untouched": true,
"blocked_cache_untouched": true,
"demos_changed": false,
"purchasing_activated": false,
"publication": false,
"checkpoint": false
},
"visual_review_pending": true,
"deployment_capacity_validated": false
}
@@ -0,0 +1,426 @@
{
"id": "SGF-MODULE-FLOW-PREPARATION-v1",
"date": "2026-11-02",
"kind": "static_preparation_inventory",
"plan_sha256": "7fad410e844c276be3c86a02b1ac94260735ef99681b9e7c5fc007044df97d51",
"sources": [
{
"id": "requisitions_delivery",
"repository": "sgf",
"path": "docs/SGF_REQUISITIONS_8039_DELIVERY.md",
"sha256": "9c0bc172b91314c54e67ac1f547ce64cf2ce97d2df285172ad5d99eee554b167",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_workflow",
"repository": "compras",
"path": "app/Services/ReceiptWorkflow.php",
"sha256": "a7325d4fdb09d1767d0d4fa3661bcf9b254e8506285080d6063bbed487bb522c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_workflow",
"repository": "compras",
"path": "app/Services/StockWorkflow.php",
"sha256": "18ddaa075432b84c0b0ee5241ff56ab9de9aa8e8db4e6132693bc7fd904b3a58",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_controller",
"repository": "compras",
"path": "app/Http/Controllers/StockController.php",
"sha256": "79aa0f96da7b8290b23489bdaa5c45a4d9f122483dbc0b4132793f76e4f97d0b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_lots",
"repository": "compras",
"path": "app/Services/InventoryLots.php",
"sha256": "911a0ce691c58ec1f635260e875ff8d4acfa2a45eecbf74b59b254b3d9209b52",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_counts",
"repository": "compras",
"path": "app/Services/InventoryCounts.php",
"sha256": "0c1b0d5e795a15b4d762c47fcdbeb19f225aa933b4507938f310ff25026afa11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_dispositions",
"repository": "compras",
"path": "app/Services/InventoryDispositions.php",
"sha256": "35a05ed9d6e2cb96a38c1d9b8cb02631bae000a9ac9633dbb53025ceb611983c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reversals",
"repository": "compras",
"path": "app/Services/InventoryReversals.php",
"sha256": "d1712029d7cedda6fbc9b0562bc108ebf8fb235d7aeb2bca4158639d3fc9a2a2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "warehouse_reservations",
"repository": "compras",
"path": "app/Services/WarehouseReservations.php",
"sha256": "3120eaf6d9c8cedf3c991edcb41133f5107ca62736cea7e082ae4773755ffb54",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_menu",
"repository": "sgf",
"path": "resources/js/stock-menu.js",
"sha256": "776360166b0fdacad343853eb335044306f078acb8da1439715010b4713dc4ff",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "invoice_workflow",
"repository": "compras",
"path": "app/Services/InvoiceWorkflow.php",
"sha256": "f1e8530315e33d3c8eb23752699b3bbcba0af5248af478e861f3b3e75a462c11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "supplier_adapter",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierPayables.php",
"sha256": "c17d44391cbd96941aa2dd2eac2cb167508faf6453c6a1e86333846df1ba18b9",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "payables",
"repository": "sgf",
"path": "packages/payables/src/Payables.php",
"sha256": "ed853f3eb48ebcf91f51a8fe9ed8e49b0e1bc30cce4852cc9394d51cff28c74d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlements",
"repository": "sgf",
"path": "packages/payables/src/SupplierSettlements.php",
"sha256": "1238c8abe950ca9c88746bb020a85392b7e42e8d7e3c8d86f0a5f79015f9ddfe",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlement_delivery",
"repository": "sgf",
"path": "docs/SUPPLIER_SETTLEMENT_DELIVERY.md",
"sha256": "46d9836e70b17a78acb2230f76122de38096384e55b4b2f5298aa9c73ab1fd20",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_workflow",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopWorkflow.php",
"sha256": "a09d7c14c7101c36a2539f346494584340493a56ca951c7b1e66418f43d80adb",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "direct_costs",
"repository": "sgf",
"path": "app/Modules/Workshop/DirectCosts.php",
"sha256": "51f70a18731ed6371442f8e6364c52b163f46bf9b58c86b407b73f39fffb164c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_costs",
"repository": "sgf",
"path": "app/Modules/Industry/IndustrialCosts.php",
"sha256": "55ad20b756d94d3d734886f8a6aae157a32916735f8af9fb6a3a5c69859beb45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_billing",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopBilling.php",
"sha256": "039fdfdab77a8856b070249e028894a740222199969cabd614bfaab0c9e5a2d2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_invoicing",
"repository": "sgf",
"path": "app/Modules/Services/ServiceInvoicing.php",
"sha256": "b5ac9898f2089fad7799b9e62e5ce5db6df7fd64643e8e7e3b52c6a0e2d142a8",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_receivables",
"repository": "sgf",
"path": "app/Modules/Services/ServiceReceivables.php",
"sha256": "725bc8773a78cfd05dd0a729d885a97c0eef43854ca7ab4210b4d5e80d5d54ec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "catalogue_accounting",
"repository": "sgf",
"path": "app/Modules/Services/CatalogueAccounting.php",
"sha256": "15e72188334a0c6e9b65050e9609ac1c50a924899a753d47557e3375017e5d1c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "accounting_menu",
"repository": "sgf",
"path": "docs/ACCOUNTING_MENU_DELIVERY.md",
"sha256": "d2c72d3e1ba5256720a00520ea18fe5e2b9664517d7c8639e64dfbad00aebb40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_core",
"repository": "sgf",
"path": "packages/general-ledger/src/PayableJournal.php",
"sha256": "aa1d622759e647d21df66164a0582473f2c1daac95cd69f5c0f712a6fd6753d2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_adapter",
"repository": "sgf",
"path": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "a87d2ea373bc61bb139aa29f2a354b9813bbb2d6229a389f8d37fd8e9890edec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_DELIVERY.md",
"sha256": "e8aea14f18da04a407ae2a225c5537f133394b830fb059a233ad4367d976007f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_core",
"repository": "sgf",
"path": "packages/general-ledger/src/LedgerCycle.php",
"sha256": "5040369c2fc24ef713e758e5d4d1241fc52b8bef421ea7bf45855000f755d524",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_native_adapter",
"repository": "compras",
"path": "app/Services/GeneralLedger.php",
"sha256": "fc80b20ad0ab2dac1c8df4b535349d05b416f1c5f2eec3e7718eda51f6626485",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_COMPLETE_CYCLE_DELIVERY.md",
"sha256": "424a6d9de6f3a02c4ff691df7e045cbf1fd42838bf20c03cca61dcc79c390b2d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_source",
"repository": "sgf",
"path": "app/Modules/Accounting/IndustrialLedgerSource.php",
"sha256": "2479bfd33182fdd918b14748ca9e00e8c789a127bf1746651c8f8f7d53205024",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_workspace",
"repository": "sgf",
"path": "resources/views/accounting/industrial-ledger.blade.php",
"sha256": "989ad6272fd14b681ca0000196dada276de0904f5ae69e4338f65e7e8cc5af45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_DELIVERY.md",
"sha256": "70c03e5093b349b81aef3132223dfcca440037ab2ab64ae48be28ec72f4c356f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_correction_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_CORRECTION_DELIVERY.md",
"sha256": "a9040aa59528af4acf5ac211d24d43624ee67ec03715ff128bceb56a8cad671b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_writer",
"repository": "sgf",
"path": "packages/inventory-write/src/ReceiptMovementWriter.php",
"sha256": "279cec2ec915e27cf431355fca1e36f21cb3c15a77d02834723a41ec7a6f8f40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_movement_adapter",
"repository": "compras",
"path": "app/Services/ReceiptStockMovement.php",
"sha256": "bd95d201563e4b028f7412eea77d5b157bbc464ddb5b34907bdf17b44d3c1637",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reader",
"repository": "sgf",
"path": "packages/inventory-read/src/InventoryReader.php",
"sha256": "9b0591600da07719d655324ccf0b740f06de07db2806540684c9730d048e44b6",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_read_adapter",
"repository": "sgf",
"path": "app/Modules/Inventory/StockReadController.php",
"sha256": "c6131733974b6902c556593709729356769d11aea9eada3fc5397246102068f4",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_stock_bridge",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopStock.php",
"sha256": "6460a4235fe7b0b4602b0aeb63a47f1a97e367e93baba6aa774be5fa0dac4e6e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_stock_controller",
"repository": "sgf",
"path": "app/Modules/Workshop/Http/WorkshopStockController.php",
"sha256": "06c9f85f926b4268636887f50458cd19fc1a467ae636dea94caba586fb463c0e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_recovery_workspace",
"repository": "sgf",
"path": "resources/views/accounting/receipt-recovery.blade.php",
"sha256": "aee62d5b35f044cf10f759b098647b2fbe4d3fb34c68a065fd1f274c1d0aa7ee",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "requisition_core",
"repository": "compras",
"path": "packages/purchasing/src/InternalRequisitions.php",
"sha256": "5acd82015a4f4b24c5f956139e7d9ec8822e1408e8edd6a2c21802673d647d94",
"meaning": "source_present_only_not_operational_proof"
}
],
"stages": [
{
"id": "requisition_order",
"owner": "purchasing",
"effect": "approved_procurement_origin",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Requisition core exists in Compras; the SGF adapter/interface was installed only in isolated demonstration8039. This root source tree has no SGF requisition adapter. Do not confuse the demonstration with a generally installed composition or activate a candidate."
},
{
"id": "accepted_receipt",
"owner": "purchasing",
"effect": "accepted_physical_receipt",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Native receipt workflow delegates once to the shared writer; SGF observes the actual movement in QA. Preparing/confirming receipts in the SGF interface and an installed procurement composition remain pending."
},
{
"id": "physical_stock",
"owner": "stock",
"effect": "physical_movement_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Shared paged reader works in both QA hosts, with source revisions and explicit bindings. Operational bindings/installation and stock valuation remain pending; missing source is not zero."
},
{
"id": "supplier_invoice",
"owner": "purchasing",
"effect": "verified_supplier_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Native verified invoice participates in common payable QA; SGF history remains a controlled receipt, not a live historical adapter. Real fiscal policy and installed procurement composition remain separate."
},
{
"id": "supplier_payable",
"owner": "finance",
"effect": "supplier_obligation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Common recognition, controlled history, report and receipt lookup are implemented in QA. Due date stays unknown when absent; operational history responsibility/source mapping and cutover remain pending."
},
{
"id": "supplier_settlement",
"owner": "finance",
"effect": "confirmed_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA confirmation/allocation/reversal and scoped receipt lookup exist; no bank execution, real reconciliation or live historical SGF cutover is delivered."
},
{
"id": "workshop_execution",
"owner": "workshop",
"effect": "verified_work_record",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Verified observations exist; no automatic physical stock movement."
},
{
"id": "workshop_stock_consumption",
"owner": "stock",
"effect": "company_material_consumption_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA issue, existing delivery link, partial allocations, returns and proposal withdrawal/rejection are implemented with explicit review and no duplicate movement. Native warehouse return and SGF observation have separate proof. Operational item/warehouse mappings and installed composition remain pending."
},
{
"id": "verified_cost",
"owner": "finance",
"effect": "validated_cost_version",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Current costs are synthetic; physical movement linkage is future and absence of rate stays visible."
},
{
"id": "sales_draft",
"owner": "commercial",
"effect": "commercial_draft_from_unique_origins",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Draft integration exists; cost is not sale price and draft does not decrement stock."
},
{
"id": "sales_invoice",
"owner": "commercial",
"effect": "issued_sales_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Actual test issuance and QA accounting recognition are proved. Real fiscal issuance/compliance remains guarded."
},
{
"id": "customer_receivable",
"owner": "finance",
"effect": "customer_receipt_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA opening, confirmed receipts/allocations400+600, reversal400 and accounting integration are proved. Real money, fiscal receipts and bank reconciliation are excluded."
},
{
"id": "general_ledger",
"owner": "accounting",
"effect": "balanced_journal_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Authorised QA source effects use one writer: supplier recognition/settlement/correction, sales and receivable allocations/reversal, direct cost and its correction, industrial result1800 and its explicit atomic correction to1820 with residual300 excluded. New corrected SGF composition reconciles11 journals/23 lines and gross8725 with joint reviewed close. Real chart/tax policy, stock valuation, payroll, additional correction chains, reopening, historical/operational cutover and deployment remain excluded."
}
],
"checks": {
"source_paths_and_hashes": true,
"single_owner_per_stage": true,
"mandatory_dependency_graph_acyclic": true,
"planned_consumers_explicit": true
},
"limitations": [
"Source existence is not execution, parity, acceptance or deployment evidence.",
"Dependencies represent the selected synthetic path, not universal product eligibility rules.",
"No stage transition engine, inventory adapter or journal engine implemented by this inventory."
],
"preservation": {
"database_connections": 0,
"source_execution": false,
"application_routes_changed": false,
"rights_changed": false,
"protected_six_records_untouched": true,
"blocked_cache_untouched": true,
"demos_changed": false,
"purchasing_activated": false,
"publication": false,
"checkpoint": false
},
"visual_review_pending": true,
"deployment_capacity_validated": false
}
@@ -0,0 +1,433 @@
{
"id": "SGF-MODULE-FLOW-PREPARATION-v1",
"date": "2026-11-02",
"kind": "static_preparation_inventory",
"plan_sha256": "b0bd122ba084085e81ec9f74d1dfaa58351f71f4186af7cda996e51e0609ea8c",
"sources": [
{
"id": "requisitions_delivery",
"repository": "sgf",
"path": "docs/SGF_REQUISITIONS_8039_DELIVERY.md",
"sha256": "9c0bc172b91314c54e67ac1f547ce64cf2ce97d2df285172ad5d99eee554b167",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_workflow",
"repository": "compras",
"path": "app/Services/ReceiptWorkflow.php",
"sha256": "a7325d4fdb09d1767d0d4fa3661bcf9b254e8506285080d6063bbed487bb522c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_workflow",
"repository": "compras",
"path": "app/Services/StockWorkflow.php",
"sha256": "18ddaa075432b84c0b0ee5241ff56ab9de9aa8e8db4e6132693bc7fd904b3a58",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_controller",
"repository": "compras",
"path": "app/Http/Controllers/StockController.php",
"sha256": "79aa0f96da7b8290b23489bdaa5c45a4d9f122483dbc0b4132793f76e4f97d0b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_lots",
"repository": "compras",
"path": "app/Services/InventoryLots.php",
"sha256": "911a0ce691c58ec1f635260e875ff8d4acfa2a45eecbf74b59b254b3d9209b52",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_counts",
"repository": "compras",
"path": "app/Services/InventoryCounts.php",
"sha256": "0c1b0d5e795a15b4d762c47fcdbeb19f225aa933b4507938f310ff25026afa11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_dispositions",
"repository": "compras",
"path": "app/Services/InventoryDispositions.php",
"sha256": "35a05ed9d6e2cb96a38c1d9b8cb02631bae000a9ac9633dbb53025ceb611983c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reversals",
"repository": "compras",
"path": "app/Services/InventoryReversals.php",
"sha256": "d1712029d7cedda6fbc9b0562bc108ebf8fb235d7aeb2bca4158639d3fc9a2a2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "warehouse_reservations",
"repository": "compras",
"path": "app/Services/WarehouseReservations.php",
"sha256": "3120eaf6d9c8cedf3c991edcb41133f5107ca62736cea7e082ae4773755ffb54",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_menu",
"repository": "sgf",
"path": "resources/js/stock-menu.js",
"sha256": "776360166b0fdacad343853eb335044306f078acb8da1439715010b4713dc4ff",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "invoice_workflow",
"repository": "compras",
"path": "app/Services/InvoiceWorkflow.php",
"sha256": "f1e8530315e33d3c8eb23752699b3bbcba0af5248af478e861f3b3e75a462c11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "supplier_adapter",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierPayables.php",
"sha256": "c17d44391cbd96941aa2dd2eac2cb167508faf6453c6a1e86333846df1ba18b9",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "payables",
"repository": "sgf",
"path": "packages/payables/src/Payables.php",
"sha256": "ed853f3eb48ebcf91f51a8fe9ed8e49b0e1bc30cce4852cc9394d51cff28c74d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlements",
"repository": "sgf",
"path": "packages/payables/src/SupplierSettlements.php",
"sha256": "1238c8abe950ca9c88746bb020a85392b7e42e8d7e3c8d86f0a5f79015f9ddfe",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlement_delivery",
"repository": "sgf",
"path": "docs/SUPPLIER_SETTLEMENT_DELIVERY.md",
"sha256": "46d9836e70b17a78acb2230f76122de38096384e55b4b2f5298aa9c73ab1fd20",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_workflow",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopWorkflow.php",
"sha256": "a09d7c14c7101c36a2539f346494584340493a56ca951c7b1e66418f43d80adb",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "direct_costs",
"repository": "sgf",
"path": "app/Modules/Workshop/DirectCosts.php",
"sha256": "51f70a18731ed6371442f8e6364c52b163f46bf9b58c86b407b73f39fffb164c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_costs",
"repository": "sgf",
"path": "app/Modules/Industry/IndustrialCosts.php",
"sha256": "55ad20b756d94d3d734886f8a6aae157a32916735f8af9fb6a3a5c69859beb45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_billing",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopBilling.php",
"sha256": "039fdfdab77a8856b070249e028894a740222199969cabd614bfaab0c9e5a2d2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_invoicing",
"repository": "sgf",
"path": "app/Modules/Services/ServiceInvoicing.php",
"sha256": "b5ac9898f2089fad7799b9e62e5ce5db6df7fd64643e8e7e3b52c6a0e2d142a8",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_receivables",
"repository": "sgf",
"path": "app/Modules/Services/ServiceReceivables.php",
"sha256": "725bc8773a78cfd05dd0a729d885a97c0eef43854ca7ab4210b4d5e80d5d54ec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "catalogue_accounting",
"repository": "sgf",
"path": "app/Modules/Services/CatalogueAccounting.php",
"sha256": "15e72188334a0c6e9b65050e9609ac1c50a924899a753d47557e3375017e5d1c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "accounting_menu",
"repository": "sgf",
"path": "docs/ACCOUNTING_MENU_DELIVERY.md",
"sha256": "d2c72d3e1ba5256720a00520ea18fe5e2b9664517d7c8639e64dfbad00aebb40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_core",
"repository": "sgf",
"path": "packages/general-ledger/src/PayableJournal.php",
"sha256": "aa1d622759e647d21df66164a0582473f2c1daac95cd69f5c0f712a6fd6753d2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_adapter",
"repository": "sgf",
"path": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "a87d2ea373bc61bb139aa29f2a354b9813bbb2d6229a389f8d37fd8e9890edec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_DELIVERY.md",
"sha256": "e8aea14f18da04a407ae2a225c5537f133394b830fb059a233ad4367d976007f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_core",
"repository": "sgf",
"path": "packages/general-ledger/src/LedgerCycle.php",
"sha256": "5040369c2fc24ef713e758e5d4d1241fc52b8bef421ea7bf45855000f755d524",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_native_adapter",
"repository": "compras",
"path": "app/Services/GeneralLedger.php",
"sha256": "fc80b20ad0ab2dac1c8df4b535349d05b416f1c5f2eec3e7718eda51f6626485",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_COMPLETE_CYCLE_DELIVERY.md",
"sha256": "424a6d9de6f3a02c4ff691df7e045cbf1fd42838bf20c03cca61dcc79c390b2d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_source",
"repository": "sgf",
"path": "app/Modules/Accounting/IndustrialLedgerSource.php",
"sha256": "2479bfd33182fdd918b14748ca9e00e8c789a127bf1746651c8f8f7d53205024",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_workspace",
"repository": "sgf",
"path": "resources/views/accounting/industrial-ledger.blade.php",
"sha256": "989ad6272fd14b681ca0000196dada276de0904f5ae69e4338f65e7e8cc5af45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_DELIVERY.md",
"sha256": "70c03e5093b349b81aef3132223dfcca440037ab2ab64ae48be28ec72f4c356f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_correction_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_CORRECTION_DELIVERY.md",
"sha256": "a9040aa59528af4acf5ac211d24d43624ee67ec03715ff128bceb56a8cad671b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_writer",
"repository": "sgf",
"path": "packages/inventory-write/src/ReceiptMovementWriter.php",
"sha256": "279cec2ec915e27cf431355fca1e36f21cb3c15a77d02834723a41ec7a6f8f40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_movement_adapter",
"repository": "compras",
"path": "app/Services/ReceiptStockMovement.php",
"sha256": "bd95d201563e4b028f7412eea77d5b157bbc464ddb5b34907bdf17b44d3c1637",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reader",
"repository": "sgf",
"path": "packages/inventory-read/src/InventoryReader.php",
"sha256": "9b0591600da07719d655324ccf0b740f06de07db2806540684c9730d048e44b6",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_read_adapter",
"repository": "sgf",
"path": "app/Modules/Inventory/StockReadController.php",
"sha256": "c6131733974b6902c556593709729356769d11aea9eada3fc5397246102068f4",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_stock_bridge",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopStock.php",
"sha256": "6460a4235fe7b0b4602b0aeb63a47f1a97e367e93baba6aa774be5fa0dac4e6e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_stock_controller",
"repository": "sgf",
"path": "app/Modules/Workshop/Http/WorkshopStockController.php",
"sha256": "06c9f85f926b4268636887f50458cd19fc1a467ae636dea94caba586fb463c0e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_recovery_workspace",
"repository": "sgf",
"path": "resources/views/accounting/receipt-recovery.blade.php",
"sha256": "aee62d5b35f044cf10f759b098647b2fbe4d3fb34c68a065fd1f274c1d0aa7ee",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "requisition_core",
"repository": "compras",
"path": "packages/purchasing/src/InternalRequisitions.php",
"sha256": "5acd82015a4f4b24c5f956139e7d9ec8822e1408e8edd6a2c21802673d647d94",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "requisition_qa_composition",
"repository": "sgf",
"path": "app/Modules/Purchasing/InternalRequisitionQa.php",
"sha256": "3195b51cca7546e050b62791407bdbfd130ddc2f2eabc06feed5c9bbd7f76303",
"meaning": "source_present_only_not_operational_proof"
}
],
"stages": [
{
"id": "requisition_order",
"owner": "purchasing",
"effect": "approved_procurement_origin",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "The root SGF composition now mounts the existing shared adapter and interface only in a pinned fresh QA database, with module ownership, context, scoped rights and a navigation link; request100 reserves once and is independently approved. Normal destination remains disabled and demonstration8039 is preserved. Receipt UI and generally installed procurement composition remain pending."
},
{
"id": "accepted_receipt",
"owner": "purchasing",
"effect": "accepted_physical_receipt",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Native receipt workflow delegates once to the shared writer; SGF observes the actual movement in QA. Preparing/confirming receipts in the SGF interface and an installed procurement composition remain pending."
},
{
"id": "physical_stock",
"owner": "stock",
"effect": "physical_movement_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Shared paged reader works in both QA hosts, with source revisions and explicit bindings. Operational bindings/installation and stock valuation remain pending; missing source is not zero."
},
{
"id": "supplier_invoice",
"owner": "purchasing",
"effect": "verified_supplier_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Native verified invoice participates in common payable QA; SGF history remains a controlled receipt, not a live historical adapter. Real fiscal policy and installed procurement composition remain separate."
},
{
"id": "supplier_payable",
"owner": "finance",
"effect": "supplier_obligation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Common recognition, controlled history, report and receipt lookup are implemented in QA. Due date stays unknown when absent; operational history responsibility/source mapping and cutover remain pending."
},
{
"id": "supplier_settlement",
"owner": "finance",
"effect": "confirmed_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA confirmation/allocation/reversal and scoped receipt lookup exist; no bank execution, real reconciliation or live historical SGF cutover is delivered."
},
{
"id": "workshop_execution",
"owner": "workshop",
"effect": "verified_work_record",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Verified observations exist; no automatic physical stock movement."
},
{
"id": "workshop_stock_consumption",
"owner": "stock",
"effect": "company_material_consumption_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA issue, existing delivery link, partial allocations, returns and proposal withdrawal/rejection are implemented with explicit review and no duplicate movement. Native warehouse return and SGF observation have separate proof. Operational item/warehouse mappings and installed composition remain pending."
},
{
"id": "verified_cost",
"owner": "finance",
"effect": "validated_cost_version",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Current costs are synthetic; physical movement linkage is future and absence of rate stays visible."
},
{
"id": "sales_draft",
"owner": "commercial",
"effect": "commercial_draft_from_unique_origins",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Draft integration exists; cost is not sale price and draft does not decrement stock."
},
{
"id": "sales_invoice",
"owner": "commercial",
"effect": "issued_sales_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Actual test issuance and QA accounting recognition are proved. Real fiscal issuance/compliance remains guarded."
},
{
"id": "customer_receivable",
"owner": "finance",
"effect": "customer_receipt_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA opening, confirmed receipts/allocations400+600, reversal400 and accounting integration are proved. Real money, fiscal receipts and bank reconciliation are excluded."
},
{
"id": "general_ledger",
"owner": "accounting",
"effect": "balanced_journal_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Authorised QA source effects use one writer: supplier recognition/settlement/correction, sales and receivable allocations/reversal, direct cost and its correction, industrial result1800 and its explicit atomic correction to1820 with residual300 excluded. New corrected SGF composition reconciles11 journals/23 lines and gross8725 with joint reviewed close. Real chart/tax policy, stock valuation, payroll, additional correction chains, reopening, historical/operational cutover and deployment remain excluded."
}
],
"checks": {
"source_paths_and_hashes": true,
"single_owner_per_stage": true,
"mandatory_dependency_graph_acyclic": true,
"planned_consumers_explicit": true
},
"limitations": [
"Source existence is not execution, parity, acceptance or deployment evidence.",
"Dependencies represent the selected synthetic path, not universal product eligibility rules.",
"No stage transition engine, inventory adapter or journal engine implemented by this inventory."
],
"preservation": {
"database_connections": 0,
"source_execution": false,
"application_routes_changed": false,
"rights_changed": false,
"protected_six_records_untouched": true,
"blocked_cache_untouched": true,
"demos_changed": false,
"purchasing_activated": false,
"publication": false,
"checkpoint": false
},
"visual_review_pending": true,
"deployment_capacity_validated": false
}
@@ -0,0 +1,510 @@
{
"id": "SGF-MODULE-FLOW-PREPARATION-v1",
"date": "2026-11-02",
"kind": "static_preparation_inventory",
"plan_sha256": "bf3ff0932b8789ed5c6edcc9f869a7d803f8bc16a1156d96f0ed60ba437edaa1",
"sources": [
{
"id": "requisitions_delivery",
"repository": "sgf",
"path": "docs/SGF_REQUISITIONS_8039_DELIVERY.md",
"sha256": "9c0bc172b91314c54e67ac1f547ce64cf2ce97d2df285172ad5d99eee554b167",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_workflow",
"repository": "compras",
"path": "app/Services/ReceiptWorkflow.php",
"sha256": "a7325d4fdb09d1767d0d4fa3661bcf9b254e8506285080d6063bbed487bb522c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_workflow",
"repository": "compras",
"path": "app/Services/StockWorkflow.php",
"sha256": "18ddaa075432b84c0b0ee5241ff56ab9de9aa8e8db4e6132693bc7fd904b3a58",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_controller",
"repository": "compras",
"path": "app/Http/Controllers/StockController.php",
"sha256": "79aa0f96da7b8290b23489bdaa5c45a4d9f122483dbc0b4132793f76e4f97d0b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_lots",
"repository": "compras",
"path": "app/Services/InventoryLots.php",
"sha256": "911a0ce691c58ec1f635260e875ff8d4acfa2a45eecbf74b59b254b3d9209b52",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_counts",
"repository": "compras",
"path": "app/Services/InventoryCounts.php",
"sha256": "0c1b0d5e795a15b4d762c47fcdbeb19f225aa933b4507938f310ff25026afa11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_dispositions",
"repository": "compras",
"path": "app/Services/InventoryDispositions.php",
"sha256": "35a05ed9d6e2cb96a38c1d9b8cb02631bae000a9ac9633dbb53025ceb611983c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reversals",
"repository": "compras",
"path": "app/Services/InventoryReversals.php",
"sha256": "d1712029d7cedda6fbc9b0562bc108ebf8fb235d7aeb2bca4158639d3fc9a2a2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "warehouse_reservations",
"repository": "compras",
"path": "app/Services/WarehouseReservations.php",
"sha256": "3120eaf6d9c8cedf3c991edcb41133f5107ca62736cea7e082ae4773755ffb54",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_menu",
"repository": "sgf",
"path": "resources/js/stock-menu.js",
"sha256": "776360166b0fdacad343853eb335044306f078acb8da1439715010b4713dc4ff",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "invoice_workflow",
"repository": "compras",
"path": "app/Services/InvoiceWorkflow.php",
"sha256": "f1e8530315e33d3c8eb23752699b3bbcba0af5248af478e861f3b3e75a462c11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "supplier_adapter",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierPayables.php",
"sha256": "c17d44391cbd96941aa2dd2eac2cb167508faf6453c6a1e86333846df1ba18b9",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "payables",
"repository": "sgf",
"path": "packages/payables/src/Payables.php",
"sha256": "ed853f3eb48ebcf91f51a8fe9ed8e49b0e1bc30cce4852cc9394d51cff28c74d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlements",
"repository": "sgf",
"path": "packages/payables/src/SupplierSettlements.php",
"sha256": "1238c8abe950ca9c88746bb020a85392b7e42e8d7e3c8d86f0a5f79015f9ddfe",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlement_delivery",
"repository": "sgf",
"path": "docs/SUPPLIER_SETTLEMENT_DELIVERY.md",
"sha256": "46d9836e70b17a78acb2230f76122de38096384e55b4b2f5298aa9c73ab1fd20",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_workflow",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopWorkflow.php",
"sha256": "a09d7c14c7101c36a2539f346494584340493a56ca951c7b1e66418f43d80adb",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "direct_costs",
"repository": "sgf",
"path": "app/Modules/Workshop/DirectCosts.php",
"sha256": "51f70a18731ed6371442f8e6364c52b163f46bf9b58c86b407b73f39fffb164c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_costs",
"repository": "sgf",
"path": "app/Modules/Industry/IndustrialCosts.php",
"sha256": "55ad20b756d94d3d734886f8a6aae157a32916735f8af9fb6a3a5c69859beb45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_billing",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopBilling.php",
"sha256": "039fdfdab77a8856b070249e028894a740222199969cabd614bfaab0c9e5a2d2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_invoicing",
"repository": "sgf",
"path": "app/Modules/Services/ServiceInvoicing.php",
"sha256": "b5ac9898f2089fad7799b9e62e5ce5db6df7fd64643e8e7e3b52c6a0e2d142a8",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_receivables",
"repository": "sgf",
"path": "app/Modules/Services/ServiceReceivables.php",
"sha256": "725bc8773a78cfd05dd0a729d885a97c0eef43854ca7ab4210b4d5e80d5d54ec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "catalogue_accounting",
"repository": "sgf",
"path": "app/Modules/Services/CatalogueAccounting.php",
"sha256": "15e72188334a0c6e9b65050e9609ac1c50a924899a753d47557e3375017e5d1c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "accounting_menu",
"repository": "sgf",
"path": "docs/ACCOUNTING_MENU_DELIVERY.md",
"sha256": "d2c72d3e1ba5256720a00520ea18fe5e2b9664517d7c8639e64dfbad00aebb40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_core",
"repository": "sgf",
"path": "packages/general-ledger/src/PayableJournal.php",
"sha256": "7f776c1ef6641f79862c7ab898778591911c59dd3f2ae5e1130b041c8c4289f3",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_adapter",
"repository": "sgf",
"path": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "a87d2ea373bc61bb139aa29f2a354b9813bbb2d6229a389f8d37fd8e9890edec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_DELIVERY.md",
"sha256": "e8aea14f18da04a407ae2a225c5537f133394b830fb059a233ad4367d976007f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_core",
"repository": "sgf",
"path": "packages/general-ledger/src/LedgerCycle.php",
"sha256": "5e6fdb1f5d47da16056043db75020e94172e9586a03a4b7e29c75e81b731fe14",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_native_adapter",
"repository": "compras",
"path": "app/Services/GeneralLedger.php",
"sha256": "fc80b20ad0ab2dac1c8df4b535349d05b416f1c5f2eec3e7718eda51f6626485",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_COMPLETE_CYCLE_DELIVERY.md",
"sha256": "424a6d9de6f3a02c4ff691df7e045cbf1fd42838bf20c03cca61dcc79c390b2d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_source",
"repository": "sgf",
"path": "app/Modules/Accounting/IndustrialLedgerSource.php",
"sha256": "2479bfd33182fdd918b14748ca9e00e8c789a127bf1746651c8f8f7d53205024",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_workspace",
"repository": "sgf",
"path": "resources/views/accounting/industrial-ledger.blade.php",
"sha256": "989ad6272fd14b681ca0000196dada276de0904f5ae69e4338f65e7e8cc5af45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_DELIVERY.md",
"sha256": "70c03e5093b349b81aef3132223dfcca440037ab2ab64ae48be28ec72f4c356f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_correction_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_CORRECTION_DELIVERY.md",
"sha256": "a9040aa59528af4acf5ac211d24d43624ee67ec03715ff128bceb56a8cad671b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_writer",
"repository": "sgf",
"path": "packages/inventory-write/src/ReceiptMovementWriter.php",
"sha256": "279cec2ec915e27cf431355fca1e36f21cb3c15a77d02834723a41ec7a6f8f40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_movement_adapter",
"repository": "compras",
"path": "app/Services/ReceiptStockMovement.php",
"sha256": "bd95d201563e4b028f7412eea77d5b157bbc464ddb5b34907bdf17b44d3c1637",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reader",
"repository": "sgf",
"path": "packages/inventory-read/src/InventoryReader.php",
"sha256": "9b0591600da07719d655324ccf0b740f06de07db2806540684c9730d048e44b6",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_read_adapter",
"repository": "sgf",
"path": "app/Modules/Inventory/StockReadController.php",
"sha256": "c6131733974b6902c556593709729356769d11aea9eada3fc5397246102068f4",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_stock_bridge",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopStock.php",
"sha256": "6460a4235fe7b0b4602b0aeb63a47f1a97e367e93baba6aa774be5fa0dac4e6e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_stock_controller",
"repository": "sgf",
"path": "app/Modules/Workshop/Http/WorkshopStockController.php",
"sha256": "06c9f85f926b4268636887f50458cd19fc1a467ae636dea94caba586fb463c0e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_recovery_workspace",
"repository": "sgf",
"path": "resources/views/accounting/receipt-recovery.blade.php",
"sha256": "aee62d5b35f044cf10f759b098647b2fbe4d3fb34c68a065fd1f274c1d0aa7ee",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "requisition_core",
"repository": "compras",
"path": "packages/purchasing/src/InternalRequisitions.php",
"sha256": "5acd82015a4f4b24c5f956139e7d9ec8822e1408e8edd6a2c21802673d647d94",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "requisition_qa_composition",
"repository": "sgf",
"path": "app/Modules/Purchasing/InternalRequisitionQa.php",
"sha256": "3195b51cca7546e050b62791407bdbfd130ddc2f2eabc06feed5c9bbd7f76303",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_core",
"repository": "sgf",
"path": "packages/general-ledger/src/StockValuation.php",
"sha256": "6fe704a737e8fd6684a60848b7956db345ca75fd18f517ac69c6f4dbee52e1df",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_observer",
"repository": "sgf",
"path": "app/Modules/Accounting/StockValuationRead.php",
"sha256": "cf8618800c6e93d12314cb11009505a4da0384d8701fbaaceaf2cee6489d47a3",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_schema",
"repository": "sgf",
"path": "packages/general-ledger/src/StockSchema.php",
"sha256": "2589414179da70769fff90d3f858e7bc73888cdb3a0f4cd33722a76b7b32bce4",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_composition",
"repository": "sgf",
"path": "packages/general-ledger/src/StockComposition.php",
"sha256": "2fafb664613b9c5aef30bfbec21d93701049a1114c5e2027ebecf1fdd885ae06",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_adapter",
"repository": "sgf",
"path": "integrations/purchasing/StockValuationAdapter.php",
"sha256": "2942e3567bf879301db85d4a7d0af15d9206e369e0aece264ffcc28d5c43c644",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_runtime",
"repository": "sgf",
"path": "app/Modules/Purchasing/ReceiptRuntime.php",
"sha256": "351f27debde9eedf2b1b967fcb06f4274c6c77f33fab2801f849fca1016a63ae",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/ReceiptController.php",
"sha256": "d448d3304e85ff9d1e0b8736612ace04ac5e08c487872d2204c37752a248ab6c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_screen",
"repository": "sgf",
"path": "resources/views/receipt-workspace.blade.php",
"sha256": "8a0d15a6a6bde34a6aca4ddae3f7e0219f951c109a16e6ad9b5f0a69e678e1e8",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_order_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/OrderController.php",
"sha256": "958468211587591669c506560b050ada21e1058fe353d3f09950474380e4724a",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "native_order_workflow",
"repository": "compras",
"path": "app/Services/PurchaseWorkflow.php",
"sha256": "84f9db1286058087ecb8cf08c64fcd3afc94c91d1509b985b634a3fcafd81295",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_order_screen",
"repository": "sgf",
"path": "resources/views/order-workspace.blade.php",
"sha256": "e5302fffe7a76f9675fb04eacc544ba6e423a4af311c66e7e550f826253b014e",
"meaning": "source_present_only_not_operational_proof"
}
],
"stages": [
{
"id": "requisition_order",
"owner": "purchasing",
"effect": "approved_procurement_origin",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Shared requisition QA and single100MZN reservation remain delivered. A new SGF composition now confers/issues an order from an actually approved native award, records one100MZN source-budget commitment, and receives it through the original workflow and physical writer. Native supplier-selection/award interfaces in SGF and explicit handoff from SGF requisitions to that native source remain pending; no duplicated host budget, general installation or destination activation."
},
{
"id": "accepted_receipt",
"owner": "purchasing",
"effect": "accepted_physical_receipt",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "SGF preview/confirmation/history are delivered through the original receipt workflow. New demo8065 connects an actually SGF-issued order to warehouse receipt, with distinct functions, one canonical physical movement and immutable origin evidence. Demo8064 remains preserved. Full procurement installation, catalogue search, sustained load and deployment remain pending; the native award entry is a prepared QA source, not a new SGF selection/approval interface."
},
{
"id": "physical_stock",
"owner": "stock",
"effect": "physical_movement_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Common physical readers/writers and selected stock valuation are delivered in isolated QA: receipt2UN/100, issue1UN/50, return0.5UN/25, net1.5UN/75. Same canonical physical/valuation book, with SELECT-only SGF observation and explicit rate/review/dependencies. Operational bindings/installation, real valuation method and hybrid integration with already posted direct/industrial materials remain pending."
},
{
"id": "supplier_invoice",
"owner": "purchasing",
"effect": "verified_supplier_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Native verified invoice participates in common payable QA; SGF history remains a controlled receipt, not a live historical adapter. Real fiscal policy and installed procurement composition remain separate."
},
{
"id": "supplier_payable",
"owner": "finance",
"effect": "supplier_obligation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Common recognition, controlled history, report and receipt lookup are implemented in QA. Due date stays unknown when absent; operational history responsibility/source mapping and cutover remain pending."
},
{
"id": "supplier_settlement",
"owner": "finance",
"effect": "confirmed_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA confirmation/allocation/reversal and scoped receipt lookup exist; no bank execution, real reconciliation or live historical SGF cutover is delivered."
},
{
"id": "workshop_execution",
"owner": "workshop",
"effect": "verified_work_record",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Verified observations exist; no automatic physical stock movement."
},
{
"id": "workshop_stock_consumption",
"owner": "stock",
"effect": "company_material_consumption_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA issue, existing delivery link, partial allocations, returns and proposal withdrawal/rejection are implemented with explicit review and no duplicate movement. Native warehouse return and SGF observation have separate proof. Operational item/warehouse mappings and installed composition remain pending."
},
{
"id": "verified_cost",
"owner": "finance",
"effect": "validated_cost_version",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Current costs are synthetic; physical movement linkage is future and absence of rate stays visible."
},
{
"id": "sales_draft",
"owner": "commercial",
"effect": "commercial_draft_from_unique_origins",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Draft integration exists; cost is not sale price and draft does not decrement stock."
},
{
"id": "sales_invoice",
"owner": "commercial",
"effect": "issued_sales_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Actual test issuance and QA accounting recognition are proved. Real fiscal issuance/compliance remains guarded."
},
{
"id": "customer_receivable",
"owner": "finance",
"effect": "customer_receipt_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA opening, confirmed receipts/allocations400+600, reversal400 and accounting integration are proved. Real money, fiscal receipts and bank reconciliation are excluded."
},
{
"id": "general_ledger",
"owner": "accounting",
"effect": "balanced_journal_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "One QA writer covers supplier, sales/receivables, direct/industrial costs and their approved corrections; joint11 journals/23 lines gross8725 remains its own proof. A separate authorised physical-stock book adds entry100/issue50/return25, three journals/six lines gross175, stock75 and period close. No duplicated material cost: hybrid direct/industrial-stock composition remains excluded. SGF observes the canonical stock book; stock confirmations run in its native QA composition. Real chart/tax/valuation/payroll policy, further corrections, reopening, operational cutover and deployment remain pending."
}
],
"checks": {
"source_paths_and_hashes": true,
"single_owner_per_stage": true,
"mandatory_dependency_graph_acyclic": true,
"planned_consumers_explicit": true
},
"limitations": [
"Source existence is not execution, parity, acceptance or deployment evidence.",
"Dependencies represent the selected synthetic path, not universal product eligibility rules.",
"No stage transition engine, inventory adapter or journal engine implemented by this inventory."
],
"preservation": {
"database_connections": 0,
"source_execution": false,
"application_routes_changed": false,
"rights_changed": false,
"protected_six_records_untouched": true,
"blocked_cache_untouched": true,
"demos_changed": false,
"purchasing_activated": false,
"publication": false,
"checkpoint": false
},
"visual_review_pending": true,
"deployment_capacity_validated": false
}
@@ -0,0 +1,489 @@
{
"id": "SGF-MODULE-FLOW-PREPARATION-v1",
"date": "2026-11-02",
"kind": "static_preparation_inventory",
"plan_sha256": "f6494465745f3a8e7d23edc5ef326568c144d2176b5140ed555e3ea87404bf98",
"sources": [
{
"id": "requisitions_delivery",
"repository": "sgf",
"path": "docs/SGF_REQUISITIONS_8039_DELIVERY.md",
"sha256": "9c0bc172b91314c54e67ac1f547ce64cf2ce97d2df285172ad5d99eee554b167",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_workflow",
"repository": "compras",
"path": "app/Services/ReceiptWorkflow.php",
"sha256": "a7325d4fdb09d1767d0d4fa3661bcf9b254e8506285080d6063bbed487bb522c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_workflow",
"repository": "compras",
"path": "app/Services/StockWorkflow.php",
"sha256": "18ddaa075432b84c0b0ee5241ff56ab9de9aa8e8db4e6132693bc7fd904b3a58",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_controller",
"repository": "compras",
"path": "app/Http/Controllers/StockController.php",
"sha256": "79aa0f96da7b8290b23489bdaa5c45a4d9f122483dbc0b4132793f76e4f97d0b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_lots",
"repository": "compras",
"path": "app/Services/InventoryLots.php",
"sha256": "911a0ce691c58ec1f635260e875ff8d4acfa2a45eecbf74b59b254b3d9209b52",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_counts",
"repository": "compras",
"path": "app/Services/InventoryCounts.php",
"sha256": "0c1b0d5e795a15b4d762c47fcdbeb19f225aa933b4507938f310ff25026afa11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_dispositions",
"repository": "compras",
"path": "app/Services/InventoryDispositions.php",
"sha256": "35a05ed9d6e2cb96a38c1d9b8cb02631bae000a9ac9633dbb53025ceb611983c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reversals",
"repository": "compras",
"path": "app/Services/InventoryReversals.php",
"sha256": "d1712029d7cedda6fbc9b0562bc108ebf8fb235d7aeb2bca4158639d3fc9a2a2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "warehouse_reservations",
"repository": "compras",
"path": "app/Services/WarehouseReservations.php",
"sha256": "3120eaf6d9c8cedf3c991edcb41133f5107ca62736cea7e082ae4773755ffb54",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_menu",
"repository": "sgf",
"path": "resources/js/stock-menu.js",
"sha256": "776360166b0fdacad343853eb335044306f078acb8da1439715010b4713dc4ff",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "invoice_workflow",
"repository": "compras",
"path": "app/Services/InvoiceWorkflow.php",
"sha256": "f1e8530315e33d3c8eb23752699b3bbcba0af5248af478e861f3b3e75a462c11",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "supplier_adapter",
"repository": "sgf",
"path": "app/Modules/Purchasing/SupplierPayables.php",
"sha256": "c17d44391cbd96941aa2dd2eac2cb167508faf6453c6a1e86333846df1ba18b9",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "payables",
"repository": "sgf",
"path": "packages/payables/src/Payables.php",
"sha256": "ed853f3eb48ebcf91f51a8fe9ed8e49b0e1bc30cce4852cc9394d51cff28c74d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlements",
"repository": "sgf",
"path": "packages/payables/src/SupplierSettlements.php",
"sha256": "1238c8abe950ca9c88746bb020a85392b7e42e8d7e3c8d86f0a5f79015f9ddfe",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "settlement_delivery",
"repository": "sgf",
"path": "docs/SUPPLIER_SETTLEMENT_DELIVERY.md",
"sha256": "46d9836e70b17a78acb2230f76122de38096384e55b4b2f5298aa9c73ab1fd20",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_workflow",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopWorkflow.php",
"sha256": "a09d7c14c7101c36a2539f346494584340493a56ca951c7b1e66418f43d80adb",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "direct_costs",
"repository": "sgf",
"path": "app/Modules/Workshop/DirectCosts.php",
"sha256": "51f70a18731ed6371442f8e6364c52b163f46bf9b58c86b407b73f39fffb164c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_costs",
"repository": "sgf",
"path": "app/Modules/Industry/IndustrialCosts.php",
"sha256": "55ad20b756d94d3d734886f8a6aae157a32916735f8af9fb6a3a5c69859beb45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_billing",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopBilling.php",
"sha256": "039fdfdab77a8856b070249e028894a740222199969cabd614bfaab0c9e5a2d2",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_invoicing",
"repository": "sgf",
"path": "app/Modules/Services/ServiceInvoicing.php",
"sha256": "b5ac9898f2089fad7799b9e62e5ce5db6df7fd64643e8e7e3b52c6a0e2d142a8",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "service_receivables",
"repository": "sgf",
"path": "app/Modules/Services/ServiceReceivables.php",
"sha256": "725bc8773a78cfd05dd0a729d885a97c0eef43854ca7ab4210b4d5e80d5d54ec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "catalogue_accounting",
"repository": "sgf",
"path": "app/Modules/Services/CatalogueAccounting.php",
"sha256": "15e72188334a0c6e9b65050e9609ac1c50a924899a753d47557e3375017e5d1c",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "accounting_menu",
"repository": "sgf",
"path": "docs/ACCOUNTING_MENU_DELIVERY.md",
"sha256": "d2c72d3e1ba5256720a00520ea18fe5e2b9664517d7c8639e64dfbad00aebb40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_core",
"repository": "sgf",
"path": "packages/general-ledger/src/PayableJournal.php",
"sha256": "7f776c1ef6641f79862c7ab898778591911c59dd3f2ae5e1130b041c8c4289f3",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_adapter",
"repository": "sgf",
"path": "app/Modules/Accounting/GeneralLedger.php",
"sha256": "a87d2ea373bc61bb139aa29f2a354b9813bbb2d6229a389f8d37fd8e9890edec",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "general_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_DELIVERY.md",
"sha256": "e8aea14f18da04a407ae2a225c5537f133394b830fb059a233ad4367d976007f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_core",
"repository": "sgf",
"path": "packages/general-ledger/src/LedgerCycle.php",
"sha256": "5e6fdb1f5d47da16056043db75020e94172e9586a03a4b7e29c75e81b731fe14",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_native_adapter",
"repository": "compras",
"path": "app/Services/GeneralLedger.php",
"sha256": "fc80b20ad0ab2dac1c8df4b535349d05b416f1c5f2eec3e7718eda51f6626485",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "ledger_cycle_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_COMPLETE_CYCLE_DELIVERY.md",
"sha256": "424a6d9de6f3a02c4ff691df7e045cbf1fd42838bf20c03cca61dcc79c390b2d",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_source",
"repository": "sgf",
"path": "app/Modules/Accounting/IndustrialLedgerSource.php",
"sha256": "2479bfd33182fdd918b14748ca9e00e8c789a127bf1746651c8f8f7d53205024",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_workspace",
"repository": "sgf",
"path": "resources/views/accounting/industrial-ledger.blade.php",
"sha256": "989ad6272fd14b681ca0000196dada276de0904f5ae69e4338f65e7e8cc5af45",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_ledger_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_DELIVERY.md",
"sha256": "70c03e5093b349b81aef3132223dfcca440037ab2ab64ae48be28ec72f4c356f",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "industrial_correction_delivery",
"repository": "sgf",
"path": "docs/GENERAL_LEDGER_INDUSTRIAL_CORRECTION_DELIVERY.md",
"sha256": "a9040aa59528af4acf5ac211d24d43624ee67ec03715ff128bceb56a8cad671b",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_writer",
"repository": "sgf",
"path": "packages/inventory-write/src/ReceiptMovementWriter.php",
"sha256": "279cec2ec915e27cf431355fca1e36f21cb3c15a77d02834723a41ec7a6f8f40",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_movement_adapter",
"repository": "compras",
"path": "app/Services/ReceiptStockMovement.php",
"sha256": "bd95d201563e4b028f7412eea77d5b157bbc464ddb5b34907bdf17b44d3c1637",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "inventory_reader",
"repository": "sgf",
"path": "packages/inventory-read/src/InventoryReader.php",
"sha256": "9b0591600da07719d655324ccf0b740f06de07db2806540684c9730d048e44b6",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_read_adapter",
"repository": "sgf",
"path": "app/Modules/Inventory/StockReadController.php",
"sha256": "c6131733974b6902c556593709729356769d11aea9eada3fc5397246102068f4",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_stock_bridge",
"repository": "sgf",
"path": "app/Modules/Workshop/WorkshopStock.php",
"sha256": "6460a4235fe7b0b4602b0aeb63a47f1a97e367e93baba6aa774be5fa0dac4e6e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "workshop_stock_controller",
"repository": "sgf",
"path": "app/Modules/Workshop/Http/WorkshopStockController.php",
"sha256": "06c9f85f926b4268636887f50458cd19fc1a467ae636dea94caba586fb463c0e",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "receipt_recovery_workspace",
"repository": "sgf",
"path": "resources/views/accounting/receipt-recovery.blade.php",
"sha256": "aee62d5b35f044cf10f759b098647b2fbe4d3fb34c68a065fd1f274c1d0aa7ee",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "requisition_core",
"repository": "compras",
"path": "packages/purchasing/src/InternalRequisitions.php",
"sha256": "5acd82015a4f4b24c5f956139e7d9ec8822e1408e8edd6a2c21802673d647d94",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "requisition_qa_composition",
"repository": "sgf",
"path": "app/Modules/Purchasing/InternalRequisitionQa.php",
"sha256": "3195b51cca7546e050b62791407bdbfd130ddc2f2eabc06feed5c9bbd7f76303",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_core",
"repository": "sgf",
"path": "packages/general-ledger/src/StockValuation.php",
"sha256": "6fe704a737e8fd6684a60848b7956db345ca75fd18f517ac69c6f4dbee52e1df",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_observer",
"repository": "sgf",
"path": "app/Modules/Accounting/StockValuationRead.php",
"sha256": "cf8618800c6e93d12314cb11009505a4da0384d8701fbaaceaf2cee6489d47a3",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_schema",
"repository": "sgf",
"path": "packages/general-ledger/src/StockSchema.php",
"sha256": "2589414179da70769fff90d3f858e7bc73888cdb3a0f4cd33722a76b7b32bce4",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_composition",
"repository": "sgf",
"path": "packages/general-ledger/src/StockComposition.php",
"sha256": "2fafb664613b9c5aef30bfbec21d93701049a1114c5e2027ebecf1fdd885ae06",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "stock_valuation_adapter",
"repository": "sgf",
"path": "integrations/purchasing/StockValuationAdapter.php",
"sha256": "2942e3567bf879301db85d4a7d0af15d9206e369e0aece264ffcc28d5c43c644",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_runtime",
"repository": "sgf",
"path": "app/Modules/Purchasing/ReceiptRuntime.php",
"sha256": "2e1f08c7d79c89bce99244a810dcc6dbbb61a6cd8cc90e4f2b505d1fd9298a78",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_controller",
"repository": "sgf",
"path": "app/Modules/Purchasing/ReceiptController.php",
"sha256": "93378e80afcab17b51826fd592683f47c4425818e11d0506ee2498a86953fbab",
"meaning": "source_present_only_not_operational_proof"
},
{
"id": "sgf_receipt_screen",
"repository": "sgf",
"path": "resources/views/receipt-workspace.blade.php",
"sha256": "8a0d15a6a6bde34a6aca4ddae3f7e0219f951c109a16e6ad9b5f0a69e678e1e8",
"meaning": "source_present_only_not_operational_proof"
}
],
"stages": [
{
"id": "requisition_order",
"owner": "purchasing",
"effect": "approved_procurement_origin",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "The existing shared requisition adapter is mounted in a pinned fresh SGF QA composition, with scoped rights, navigation, single100MZN reservation and distinct approval. Receipt UI is now delivered separately through the original workflow. SGF order preparation/issuance and generally installed procurement composition remain pending; destination is disabled and8039 preserved."
},
{
"id": "accepted_receipt",
"owner": "purchasing",
"effect": "accepted_physical_receipt",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "SGF now prepares an explicit preview and confirms through the original locally composed receipt workflow and shared writer, with canonical history, quality/cumulative limits, scoped rights, provenance, concurrency and recovery. New demo8064 remains unconsumed initially. General procurement installation, SGF order creation/issuance, full catalogue search, sustained load and deployment remain pending; no automatic context equivalence."
},
{
"id": "physical_stock",
"owner": "stock",
"effect": "physical_movement_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Common physical readers/writers and selected stock valuation are delivered in isolated QA: receipt2UN/100, issue1UN/50, return0.5UN/25, net1.5UN/75. Same canonical physical/valuation book, with SELECT-only SGF observation and explicit rate/review/dependencies. Operational bindings/installation, real valuation method and hybrid integration with already posted direct/industrial materials remain pending."
},
{
"id": "supplier_invoice",
"owner": "purchasing",
"effect": "verified_supplier_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Native verified invoice participates in common payable QA; SGF history remains a controlled receipt, not a live historical adapter. Real fiscal policy and installed procurement composition remain separate."
},
{
"id": "supplier_payable",
"owner": "finance",
"effect": "supplier_obligation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Common recognition, controlled history, report and receipt lookup are implemented in QA. Due date stays unknown when absent; operational history responsibility/source mapping and cutover remain pending."
},
{
"id": "supplier_settlement",
"owner": "finance",
"effect": "confirmed_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA confirmation/allocation/reversal and scoped receipt lookup exist; no bank execution, real reconciliation or live historical SGF cutover is delivered."
},
{
"id": "workshop_execution",
"owner": "workshop",
"effect": "verified_work_record",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Verified observations exist; no automatic physical stock movement."
},
{
"id": "workshop_stock_consumption",
"owner": "stock",
"effect": "company_material_consumption_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA issue, existing delivery link, partial allocations, returns and proposal withdrawal/rejection are implemented with explicit review and no duplicate movement. Native warehouse return and SGF observation have separate proof. Operational item/warehouse mappings and installed composition remain pending."
},
{
"id": "verified_cost",
"owner": "finance",
"effect": "validated_cost_version",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Current costs are synthetic; physical movement linkage is future and absence of rate stays visible."
},
{
"id": "sales_draft",
"owner": "commercial",
"effect": "commercial_draft_from_unique_origins",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Draft integration exists; cost is not sale price and draft does not decrement stock."
},
{
"id": "sales_invoice",
"owner": "commercial",
"effect": "issued_sales_document",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "Actual test issuance and QA accounting recognition are proved. Real fiscal issuance/compliance remains guarded."
},
{
"id": "customer_receivable",
"owner": "finance",
"effect": "customer_receipt_allocation_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "QA opening, confirmed receipts/allocations400+600, reversal400 and accounting integration are proved. Real money, fiscal receipts and bank reconciliation are excluded."
},
{
"id": "general_ledger",
"owner": "accounting",
"effect": "balanced_journal_once",
"state": "partial_synthetic",
"operational_integration_validated": false,
"gap": "One QA writer covers supplier, sales/receivables, direct/industrial costs and their approved corrections; joint11 journals/23 lines gross8725 remains its own proof. A separate authorised physical-stock book adds entry100/issue50/return25, three journals/six lines gross175, stock75 and period close. No duplicated material cost: hybrid direct/industrial-stock composition remains excluded. SGF observes the canonical stock book; stock confirmations run in its native QA composition. Real chart/tax/valuation/payroll policy, further corrections, reopening, operational cutover and deployment remain pending."
}
],
"checks": {
"source_paths_and_hashes": true,
"single_owner_per_stage": true,
"mandatory_dependency_graph_acyclic": true,
"planned_consumers_explicit": true
},
"limitations": [
"Source existence is not execution, parity, acceptance or deployment evidence.",
"Dependencies represent the selected synthetic path, not universal product eligibility rules.",
"No stage transition engine, inventory adapter or journal engine implemented by this inventory."
],
"preservation": {
"database_connections": 0,
"source_execution": false,
"application_routes_changed": false,
"rights_changed": false,
"protected_six_records_untouched": true,
"blocked_cache_untouched": true,
"demos_changed": false,
"purchasing_activated": false,
"publication": false,
"checkpoint": false
},
"visual_review_pending": true,
"deployment_capacity_validated": false
}

Some files were not shown because too many files have changed in this diff Show More