{ "date": "2026-11-10", "contract_sha256": "3803463f430091444001de6eace1d7e6b4fbf6b96e16a650ae2d2f3ef30ea1cc", "installation": "cc50a276c10c", "port": 8085, "sgc_dependency": false, "modules": [ { "id": "commercial", "label": "Comercial", "features": [ "Clientes e serviços com associação explícita", "Rascunho, revisão e cálculo", "Documento emitido de teste e PDF", "Continuação para recebível sem duplicação" ], "sources": [ { "file": "app/Modules/Services/ServiceWorkflow.php", "present": true, "sha256": "6f5c8af14412427134f1c40bda9215de68b3a66d46ed2287b59895f68b929179" }, { "file": "app/Modules/Services/ServiceInvoicing.php", "present": true, "sha256": "b5ac9898f2089fad7799b9e62e5ce5db6df7fd64643e8e7e3b52c6a0e2d142a8" }, { "file": "resources/js/ServicesWorkspace.jsx", "present": true, "sha256": "c170b195ccd78aa74f283a91b0b4f4cd93aea4677e3aaefe0b50af46f7e31669" }, { "file": "resources/js/ServiceInvoiceWorkspace.jsx", "present": true, "sha256": "347869a371084ae91bd7d651334f67f16369495263f28b8b8348bc442f7d6534" } ], "existing_evidence": [ { "file": "docs/proofs/invoice-tests.json", "present": false, "sha256": null, "not_reexecuted": true } ], "missing_host_tables": [ "b_internal_confirmations", "doc_records", "document_preview_models", "service_calculation_profiles", "sf_proposals", "si_invoices" ], "installation_complete": false, "client_presentable": false, "remaining": [ "Compor estruturas e guardas sintéticas na instalação única", "Conservar o documento e identidade entre Comercial e Financeiro", "Provar o percurso por interface na mesma empresa/unidade de apresentação" ] }, { "id": "purchasing", "label": "Compras", "features": [ "Fornecedores e revisão distinta", "Requisição até adjudicação e ordem", "Recepção, documento e stock único", "Factura conferida e obrigação reconhecida" ], "sources": [ { "file": "app/Modules/Purchasing/ReceiptRuntime.php", "present": true, "sha256": "9b426476b2805094fb317cc753385ef43882fb4964883e880eac287eed89d9e0" }, { "file": "app/Modules/Purchasing/RequestController.php", "present": true, "sha256": "c5c2b78866be7f0e1c8ba09c1af538cefcfbafbea81197833b50821bba0fcbca" }, { "file": "app/Modules/Purchasing/InvoiceController.php", "present": true, "sha256": "85eb46ca7e65c60bed190e592a134eb48db5762c0a90b8cd4c9d6fbd81198ba4" }, { "file": "app/Modules/Purchasing/ObligationController.php", "present": true, "sha256": "347e629306d6c1f4873afac547d13fae8ade7b268906d1312a64e7eb6998e701" } ], "existing_evidence": [ { "file": "docs/proofs/purchasing-completion-final-20261104-r2.json", "present": true, "sha256": "3b63f8653e8dbb089dfdd8f389e271c022a070d5a67a9f9d4585ce84438070cc", "not_reexecuted": true } ], "missing_host_tables": [], "installation_complete": false, "client_presentable": false, "remaining": [ "Reutilizar o percurso aceite sem o reexecutar por rotina", "Ligar a continuação financeira e contabilística da mesma origem", "Conservar a composição local sem serviço SGC obrigatório" ] }, { "id": "stock", "label": "Stock", "features": [ "Artigos, armazéns e saldos físicos", "Entradas, saídas e origem autorizada", "Transferência e conferência de destino", "Contagens, ajustamentos e devoluções", "Movimentos e relatórios por período" ], "sources": [ { "file": "app/Modules/Inventory/StockReadController.php", "present": true, "sha256": "fd02da1a69f76bf1412f86f43095a0a476de49fbb7d2676a51fe3b29ec66e298" }, { "file": "app/Modules/Inventory/CompositionStockRead.php", "present": true, "sha256": "01c558457df290879bdf6c7f8de8cd9efccad81b940731f0aaf2489cf02bfcf7" }, { "file": "app/Modules/Inventory/StockPeriodReport.php", "present": true, "sha256": "d491541c6c60bc0c661dc442b8db8ce2e757f1d63dfc4982a3631f820cfb7a06" }, { "file": "app/Modules/Workshop/WorkshopStock.php", "present": true, "sha256": "6460a4235fe7b0b4602b0aeb63a47f1a97e367e93baba6aa774be5fa0dac4e6e" } ], "existing_evidence": [ { "file": "docs/proofs/stock-period-report-20261103.json", "present": true, "sha256": "0ab25af6ffbff7d8ecb651df833771b082bf92d52f97eca4278fcac3fd5ea53b", "not_reexecuted": true } ], "missing_host_tables": [], "installation_complete": false, "client_presentable": false, "remaining": [ "Disponibilizar os comandos de stock na interface SGF pelo writer comum", "Concluir trânsito/recepção e divergências onde o percurso ainda é só definido", "Conservar reservas, unidades e ausência de saldo negativo", "Substituir as páginas informativas pelas operações efectivamente disponíveis" ] }, { "id": "workshop", "label": "Oficinas", "features": [ "Ordem e autorização", "Apontamentos e revisão distinta", "Material consumido ligado ao movimento físico", "Custo directo/industrial e correcção", "Continuação comercial por documento de origem" ], "sources": [ { "file": "app/Modules/Workshop/WorkshopStock.php", "present": true, "sha256": "6460a4235fe7b0b4602b0aeb63a47f1a97e367e93baba6aa774be5fa0dac4e6e" }, { "file": "resources/js/WorkshopWorkspace.jsx", "present": true, "sha256": "acc01d934dd11f783df82b40a6ece0905a67b0d26ff0bdfc3b18c11a027d66bb" }, { "file": "resources/js/DirectCostsWorkspace.jsx", "present": true, "sha256": "dcaf72fe36d80e16bab8e962f939168650336d1450fc3eb01693acb7ef7e0743" }, { "file": "resources/js/IndustrialCostsWorkspace.jsx", "present": true, "sha256": "51a3307fa8b2526efa12d8a16fee613bdfe141d02bd6e5af4535d581ed69c6d0" }, { "file": "resources/js/WorkshopBillingWorkspace.jsx", "present": true, "sha256": "99ea0b2c0941db0a42ff1f3833225430a73efb6933b3f88a8be4481f902ac571" } ], "existing_evidence": [ { "file": "docs/proofs/workshop-stock-closure-20261102.json", "present": true, "sha256": "261d5502f6905d53ef8046e0e900c9bee159c8c9d7e1bae4fddd8ec698313bf7", "not_reexecuted": true } ], "missing_host_tables": [ "ws_orders", "ws_entries", "dc_calculations", "ic_records", "wb_drafts" ], "installation_complete": false, "client_presentable": false, "remaining": [ "Compor na mesma instalação sem perder as aprovações existentes", "Completar o percurso oficina → stock → custo → Comercial/Contabilidade", "Conservar a distinção entre apontamento e movimento físico" ] }, { "id": "finance", "label": "Financeiro", "features": [ "Obrigações a fornecedores", "Recebíveis de clientes", "Liquidação/afectação e reversão sintéticas", "Posição financeira e comprovativos por origem" ], "sources": [ { "file": "app/Modules/Services/ServiceReceivables.php", "present": true, "sha256": "725bc8773a78cfd05dd0a729d885a97c0eef43854ca7ab4210b4d5e80d5d54ec" }, { "file": "app/Modules/Purchasing/SupplierPayables.php", "present": true, "sha256": "c17d44391cbd96941aa2dd2eac2cb167508faf6453c6a1e86333846df1ba18b9" }, { "file": "resources/js/ServiceReceivablesWorkspace.jsx", "present": true, "sha256": "f5207e5f16a4477034185d0cdeb79adc8e462cbf04d5e3fd7e633b8a5433b0ba" } ], "existing_evidence": [ { "file": "docs/proofs/supplier-settlements.json", "present": true, "sha256": "b1bce9218f99ea2d8c780022ad385e169c7acc5778ac6950236eef0630f77ad0", "not_reexecuted": true } ], "missing_host_tables": [ "sr_records", "sr_effects", "pa_obligations", "pa_access", "ps_payments" ], "installation_complete": false, "client_presentable": false, "remaining": [ "Unificar as origens autorizadas sem copiar dívida ou saldos", "Compor a tesouraria sintética e os relatórios na mesma empresa/unidade", "Conservar vencimento desconhecido e histórico imutável" ] }, { "id": "accounting", "label": "Contabilidade", "features": [ "Plano e classificação", "Diário com preparação/revisão distintas", "Razão e balancete", "Estorno/correcção e conferência de período", "Fecho sintético com rastreabilidade de origens" ], "sources": [ { "file": "app/Modules/Accounting/GeneralLedger.php", "present": true, "sha256": "a87d2ea373bc61bb139aa29f2a354b9813bbb2d6229a389f8d37fd8e9890edec" }, { "file": "app/Modules/Accounting/GeneralLedgerController.php", "present": true, "sha256": "8c83538a5df4625bb3a15c81e3bf618d12187eca77da5f6e73dd1b4b781c64ce" }, { "file": "packages/general-ledger/src/LedgerSchema.php", "present": true, "sha256": "1fb2490fe8d4d206d2f8157803307cdd4e2f733150d0fec4993a7e229fce58cb" } ], "existing_evidence": [ { "file": "docs/proofs/purchasing-completion-matrix-final-20261104.json", "present": true, "sha256": "94cb37698f294c38df9b94a5535ba4b9ac63907f94dab1e7f951a3bb27623083", "not_reexecuted": true } ], "missing_host_tables": [ "ca_proposals", "ca_resolutions", "gl_accounts", "gl_periods", "gl_entries", "gl_lines" ], "installation_complete": false, "client_presentable": false, "remaining": [ "Compor diário e relatórios reais do núcleo na instalação única", "Ligar Compras/Comercial/custos sem gerar lançamentos automáticos", "Substituir os catálogos de relatórios por consultas disponíveis e verificadas" ] } ], "release_gates": [ { "id": "single_installation", "criterion": "Os seis módulos operam no mesmo endereço e empresa/unidade, sem mudar de demonstração", "passed": false }, { "id": "functional_modules", "criterion": "Cada funcionalidade obrigatória tem ecrã/comando/consulta executável; menus e fontes isoladas não bastam", "passed": false }, { "id": "cross_module_flows", "criterion": "Os documentos atravessam as fronteiras mantendo origem, versão, autoridade e efeito único", "passed": false }, { "id": "access_isolation", "criterion": "Perfis explícitos e recusas de empresa/unidade/módulo/permissão verificadas", "passed": false }, { "id": "presentation", "criterion": "Percurso de apresentação coerente, dados fictícios identificados, linguagem e navegação revistas", "passed": false }, { "id": "operations", "criterion": "Arranque e recuperação da instalação entregues e ensaiados, sem depender do SGC", "passed": false }, { "id": "commercial_honesty", "criterion": "Documentos de teste não são emissão fiscal; capacidade de implantação exige prova própria", "passed": false }, { "id": "preservation", "criterion": "Seis registos, cache, dados aprovados e trabalho alheio preservados", "passed": false } ], "client_presentable": false, "limits": [ "Host-table footprint is a minimum projection, not a full migration/dependency validation.", "Native purchasing/stock tables live in their existing separate native book; this scan does not call that missing.", "Source/evidence presence does not mean a feature is integrated, visually accepted or deployment-ready." ], "database_writes": 0, "application_bootstraps": 0, "cache_cleared": false, "new_demo": false, "new_rights": false, "valid": false, "superseded_by": "docs/proofs/sgf-solution-closure-baseline-final-20261110.json", "correction": "Provisional footprint used incorrect workshop/ledger table names and invoice proof reference; use only the source-validated final baseline." }