Files
SGF/docs/INDUSTRIAL_BUDGET_DELIVERY.md

80 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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](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](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
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](proofs/industrial-budget-concurrency.json).
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](proofs/industrial-budget-tests.json).
**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](proofs/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](INDUSTRIAL_BUDGET_MANUAL_PROOF.md) 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](INDUSTRIAL_BUDGET_MANUAL_PROOF.md) e [ambiente confirmado](proofs/industrial-budget-manual-environment.json). 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.