Files
SGF/docs/INDUSTRIAL_BUDGET_DELIVERY.md

14 KiB
Raw Permalink Blame History

Orçamento versus realizado — ensaio isolado

Aplicação técnica especificamente autorizada — 28/10/2026

Após indicação de que 110000 e as sete concessões concretamente apresentadas eram o passo técnico pendente, o utilizador confirmou «autorizo». Executado scripts/sgf.ps1 php scripts/industrial-budget-dev-install.php --apply-confirmed-110000-and-seven-grants, exclusivamente em sgf_tempo_dev/55432. Proprietário temporário sgf_dev_owner conferido sem superutilizador, criação de bases/papéis ou bypass RLS; aplicação permanece sgf_dev_app. Migração por caminho exclusivo database/migrations/2026_10_28_110000_create_industrial_budgets.php.

  • 81 tabelas anteriores conferidas por contagem/impressão digital, sem exportar conteúdos de registos; dados, acessos e instalações anteriores preservados. 120000 permanece instalada, sem reaplicação.
  • Apenas uma migração acrescentada; seis tabelas ib_budgets, ib_decisions, ib_comparisons, ib_commands, ib_events, ib_outbox vazias. Nenhum orçamento, lote, taxa, comparação ou operação real criado.
  • Sete concessões e sete entradas de auditoria, no tenant #1 / Tempo Lda #1 / SEGI #1: conta #1 industrial_budgets.view, industrial_budgets.prepare, industrial_budget_comparisons.view, industrial_budget_comparisons.prepare; conta #2 industrial_budgets.view, industrial_budgets.validate, industrial_budget_comparisons.view. Contas, pertenças, contexto e direitos industriais de consulta existentes conferidos; sem direitos adicionais de gestão ou operação técnica.
  • Instalação e concessões na mesma transacção, com conferência da preservação e dos bloqueios antes do commit. Após restaurar a ligação da aplicação, listagens das duas contas recusam operação normal, sem lotes/origens de conversão; guardas de proposta/decisão/comparação, conversão/preparação/revisão/geração, oficinas, custos directo/industrial, recebimentos e emissão recusam com 403.
  • Guardas SQL industrial/oficinas/custo directo/recebimentos recusam desenvolvimento; a guarda industrial é usada por INSERT nas seis tabelas novas. Fontes funcionais e guardas não alteradas.

Sintaxe PHP aprovada; prova de preservação e bloqueios em storage/app/private/industrial-budget-dev-install-proof.json, exclusivamente local e sem credenciais/conteúdos dos registos. Não se repetiram testes que recriam a fixture manual aceite. Referências abaixo a 110000/sete concessões pendentes são históricas. Aceitação 04870f0 e limitações de capturas mantidas; sem uso real, stock, lançamentos, facturação ou publicação. Alterações desta instalação ainda sem novo checkpoint.

Aceitação posterior de 28/10/2026: entrega aceite com a limitação das capturas documentada e checkpoint exclusivamente local autorizado. Ver INDUSTRIAL_BUDGET_ACCEPTANCE.md. Referências abaixo à aceitação/checkpoint pendentes são históricas. Provas pendentes não se tornam realizadas; 110000, sete concessões e utilização real continuam por autorizar.

28/10/2026, Africa/Johannesburg. INDUSTRIAL-BUDGET-ACTUAL-SIM-v1, secção 16 de INDUSTRIAL_COST_ACCOUNTING_SCOPE.md. Preservados cbdf2b4, 4a94e8a e alterações posteriores. Sem aceitação presumida ou checkpoint de encerramento. Nenhuma migração ou concessão nova em desenvolvimento.

Comportamento e limites

Orçamento submetido imutável por lote, produto, empresa/unidade, período, MZN e 10 UN. Preparador propõe; identidade distinta aprova/recusa versão exacta sem editar. Sucessora identifica a anterior e o motivo e requer nova validação. Proposta posterior ao realizado é hipótese retrospectiva explícita, sem alegar planeamento anterior. Orçamento 900 material + 600 trabalho + 300 indirectos imputados aprovado como pressuposto do ensaio pelo utilizador; a validação da versão no sistema permanece separada.

Comparação selecciona explicitamente orçamento aprovado e resultado industrial validado, ambos actuais, por ID/versão. O resultado reutilizado conserva origens, taxas, critério e respectiva fotografia: não cria outro consumo, tempo, resultado industrial ou imputação. Desvio R − P por componente: 1 000 − 900 = +100; 500 − 600 = −100; 300 − 300 = 0; total 0. Reconciliação: 1 800 + 0 = 1 800; soma dos desvios 100 − 100 + 0 = 0. Percentagens exactas 100/9 %, −50/3 % e 0 %; total 0 %. Não se somam percentagens das componentes.

Residual 300 MZN por imputar fora do orçamento/desvio do lote. Reconciliação realizada preservada: 2 100 = 1 800 atribuídos + 300 por imputar. Sem taxa material: 800 conhecidos, material indisponível, pares trabalho/indirectos com desvio −100/0, comparação incompleta e desvio total/percentagem global indisponíveis. Não se apresenta −900 ou outra suposta poupança pelo material desconhecido. Previsto desconhecido também impede o desvio da componente; previsto zero conhecido permite desvio monetário mas não percentagem. 0/0 permanece indisponível.

Aritmética racional exacta com ExactCostMath, sem float, arredondamento silencioso ou regra fiscal. Incompatibilidades de produto/lote, empresa/unidade, quantidade, unidade, moeda, período e âmbito são recusadas, sem conversões ou ajuste por volume. Só diferenças monetárias por componente; não atribui preço, eficiência, produtividade, margem ou causas.

Fotografias e decisões imutáveis; mudança de orçamento, resultado ou dependência identifica comparações antigas como históricas/desactualizadas. Não se seleccionam sucessoras automaticamente. Repetição com mesma chave/conteúdo recupera o mesmo ID; conteúdo diferente é conflito. Bloqueio de empresa serializa revisões; comando, auditoria, evento e outbox são transaccionais, sem consumidor contabilístico. Falha de outbox desfaz a operação. SQL reforça ambiente exclusivo de testes, cadeias, referências aprovadas/actuais, identidade distinta e imutabilidade; não constitui motor independente de cálculo nem RLS contra administrador de confiança.

Percurso de prova e arranque

Menu Orçamento versus realizado com direitos explícitos, sem herança de industrial_costs.*. Preparador submete valores e fundamento; validador entra separadamente e decide orçamento por ID/versão; preparador escolhe orçamento e resultado exactos para comparar; validador consulta sem formulário de preparação. Actualização de versões é explícita. Histórico permanece visível, com aviso de desactualização.

Com base de testes vazia e sob TestingDatabaseGuard, preparar pelo fluxo existente, sem apagar registos para contornar recusa de fixture:

powershell -NoProfile -ExecutionPolicy Bypass -File scripts/browser-proof.ps1 start -Port 8002
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/sgf.ps1 php scripts/industrial-budget-fixture.php --env=testing

Porta 8002 autorizada nesta sessão por a 8001 estar ocupada por outro projecto, cujo processo não foi alterado. browser-proof.ps1 mantém 8001 como valor por omissão e permite porta explícita livre, verificando-a antes do arranque. Instância browser-testing, sgf_tempo_test/55432, sessão/cache isolados e CSRF activo preservados. Credenciais sintéticas aleatórias apenas no manifesto local protegido, nunca em documentação, argumentos ou relatório. Parar exclusivamente a prova SGF com scripts/browser-proof.ps1 stop antes de testes que recriam a base.

Migração proposta — não aplicada em desenvolvimento

2026_10_28_110000_create_industrial_budgets.php, SQL database/sql/industrial-budgets.sql. Destino futuro proposto sgf_tempo_dev / 127.0.0.1:55432, por caminho exclusivo e proprietário separado sgf_dev_owner; aplicação permanece sgf_dev_app. Exige autorização específica antes da aplicação; não existe instalador de desenvolvimento deste incremento.

Cria seis tabelas ib_budgets, ib_decisions, ib_comparisons, ib_commands, ib_events, ib_outbox, índices/FKs/triggers e função própria. Amplia o CHECK com cinco nomes de direitos de unidade, preservando os anteriores; não atribui direitos, não modifica origens ic_* e não contém dados de demonstração. down() recusa destruição de história. INSERT em todas as novas tabelas exige sgf_tempo_test/55432 via guarda SQL já existente. Guarda da aplicação continua a exigir ambiente isolado seguro, sem opção de activar operações reais.

Sete concessões propostas — não aplicadas

Todas no tenant #1 / Tempo Lda #1 / SEGI #1, contas existentes; sem gestão de acessos ou âmbito adicional:

Conta Direitos exactos propostos
Osmane #1 industrial_budgets.view, industrial_budgets.prepare, industrial_budget_comparisons.view, industrial_budget_comparisons.prepare
Samira #2 industrial_budgets.view, industrial_budgets.validate, industrial_budget_comparisons.view

Consulta da comparação exige também consulta do orçamento e do realizado; os direitos industriais existentes permanecem separados. scripts/industrial-budget-permissions-preview.php é só consulta, sem ramo de aplicação: confirmou as sete ausentes, 110000 pendente e guarda real recusada com 403. A distribuição funcional aprovada não autoriza estas concessões em desenvolvimento.

Ficheiros e verificações

Novos: app/Modules/Industry/IndustrialBudgets.php, app/Modules/Industry/Http/IndustrialBudgetsController.php, resources/js/IndustrialBudgetsWorkspace.jsx, migração/SQL acima, tests/Feature/IndustrialBudgetsTest.php, tests/Support/IndustrialBudgetFixture.php, scripts industrial-budget-fixture.php, industrial-budget-worker.php, industrial-budget-concurrency.php, industrial-budget-permissions-preview.php e relatório/provas. Integrações em routes/web.php, resources/js/app.jsx e parâmetro de porta de scripts/browser-proof.ps1; registos em escopo, README e AGENTS. Nenhuma alteração às fontes funcionais industriais anteriores ou dependências.

Nove testes novos: igualdade, acima/abaixo, compensação, base zero, 0/0, desconhecido e falta material, dimensões incompatíveis, quantidade realizada alterada, proposta recusada, versões históricas, mudança de origem, permissões e revogação no pedido seguinte/replay, token de contexto antigo, acesso cruzado de empresa, exactidão, rollback de outbox, recuperação de resposta, imutabilidade SQL e guarda normal. Seis cenários com dois processos sobrepostos aprovados: proposta repetida, decisão repetida, comparação repetida, sucessoras incompatíveis, decisões concorrentes e comparações concorrentes. Ver prova concorrente.

Compilação scripts/sgf.ps1 npm run build aprovada com Vite 8.3.5; sem instalação/substituição de dependências. Regressão completa scripts/sgf.ps1 test --log-junit=storage/app/industrial-budget-regression.xml: 169 testes / 3 004 asserções, zero falhas/erros. XML e saída detalhada apenas locais. Ver resumo de provas.

Prova no navegador pendente: instância isolada arrancada correctamente em http://127.0.0.1:8002 e fixture industrial preparada com resultado validado de 1 800 MZN. Antes de qualquer login ou operação visual, a ferramenta de computer-use interrompeu o acesso por não conseguir determinar o URL actual do Edge no Windows com confiança suficiente para aplicar a política. Não houve tentativa de contornar a restrição, nova sessão autenticada, orçamento ou comparação demonstrados no navegador. A instância SGF foi parada; nenhum processo do outro projecto foi alterado. A entrega não está integralmente verificada até completar essa prova. O próximo percurso é submeter orçamento 900/600/300 pelo preparador, validar pela identidade distinta, comparar as referências exactas e consultar o resultado completo; depois seleccionar uma sucessora industrial validada sem taxa material e demonstrar os 800 conhecidos/incompletude, preservando a comparação anterior como histórica. Não se declara esta sequência executada.

Recorte de uma etapa, um produto/lote, 10 UN, MZN e três componentes. Sem orçamento flexível, decomposição causal, reservas/stock, previsto de residual, compras, salários reais, facturação, lançamentos, fecho, activação real ou publicação. Aceitação e checkpoint de encerramento permanecem pendentes.

Retoma manual preparada — 28/10/2026

Revisão técnica posterior concluída: industrial-budget-manual-verify.php reconciliou ambas as fotografias com as fórmulas exactas e as referências/decisões, histórico, completude, residual e separação de direitos; sem alterar registos ou credenciais. Prova em industrial-budget-manual-results.json. Resumo de testes corrigido para separar a tentativa automática histórica do percurso manual relatado. Capturas continuam indisponíveis; sem aceitação presumida ou checkpoint. Nenhuma correcção ao cálculo foi necessária nesta revisão; não se repetiu a bateria aceite de testes. 110000 e sete concessões reconfirmadas ausentes em desenvolvimento.

Actualização posterior: percurso manual confirmado pelo utilizador: orçamento #10 v2 aprovado por identidade distinta, comparação completa #8 v1 com realizado #23 v1, resultado incompleto #24 v2 validado e comparação #9 v2 com 800 conhecidos. Confirmada a ausência dos formulários de preparação na conta de Samira sintética. Histórico e residual separados preservados. Ver o registo manual para evidência e limites: textos enviados pelo utilizador e consulta read-only aos IDs/decisão, sem capturas recebidas ou automação recuperada. Aceitação e checkpoint continuam pendentes. A descrição seguinte corresponde à preparação anterior ao percurso.

Após segunda interrupção da automação, o utilizador pediu preparação da prova manual sem nova tentativa automática. Instância 8002 retomada sobre os dados sintéticos existentes, sem reset/migrações/concessões, com diagnóstico HTTP a confirmar a ligação efectiva. Ver guia e estado da prova manual e ambiente confirmado. Credenciais apenas em ficheiro local protegido; nenhum login, resultado manual ou captura é declarado como já observado. A instância fica ligada para o utilizador executar o percurso; aceitação e checkpoint continuam pendentes.