80 lines
14 KiB
Markdown
80 lines
14 KiB
Markdown
# 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.
|