This commit is contained in:
2026-10-29 22:42:37 +02:00
parent 78e89a51d2
commit 53ff46b0a2
52 changed files with 2082 additions and 79 deletions
+32
View File
@@ -1,7 +1,39 @@
# Obrigação a fornecedor — entrega técnica em verificação
**Evolução posterior no projecto Compras:** [passagem explícita do histórico de pagamentos](../../compras/docs/passagem-historico-pagamentos.md), `PAYABLE-HISTORY-IMPORT-v1`, implementada na fonte comum com migração 000022 preparada e activação separada desligada por omissão. Principal integral, dedução única de confirmados, pendentes/rejeitados preservados sem abatimento, revisor distinto e unicidade. Prova PostgreSQL histórica e regressão anterior nas duas composições aprovadas; não aplicada às bases habituais/demos. O adaptador SGF anterior permanece sem fornecedor de histórico; não se declara essa ligação entregue no SGF. Sem novos pagamentos, reconciliação, stock/orçamento ou contabilidade por arrasto.
29/10/2026. `COMMON-PAYABLE-SOURCE-SIM-v1`, [especificação e regras aprovadas](SUPPLIER_PAYABLE_SCOPE.md). **Implementado apenas em QA, sem aceitação ou checkpoint de encerramento presumidos.** O exemplo executado é o aprovado mais recentemente: base **10 000 MZN**, imposto documental **1 600 MZN**, principal **11 600 MZN**. Exemplos anteriores de 1 160 MZN na especificação são históricos; não são os valores desta entrega.
## Entrada sem palavra-passe — 29/10/2026
Por pedido expresso do responsável, a demonstração admite entrada por função sem procurar credenciais: SGF `http://127.0.0.1:8006/demo`, Compras `http://127.0.0.1:8005/demo`. Escolher Preparar, Validar ou Consultar; a empresa/unidade SGF é seleccionada e revalidada no servidor. A página do percurso permite voltar à escolha de função e sair. As sessões são renovadas na troca, os perfis existentes permanecem distintos e nenhuma concessão foi acrescentada. As identidades são sintéticas e partilhadas por função, sem identificar o avaliador real. O cenário/histórico é partilhado e conservado.
Código de entrada: `scripts/payables-demo-entry.php`, registado exclusivamente por `scripts/payables-router.php` nos hosts QA já isolados. Não altera o login operacional nem disponibiliza entrada anónima na instalação pública. O motor financeiro permanece inalterado. Prova HTTP `scripts/payables-demo-entry-proof.mjs` / `docs/proofs/payables-demo-entry.json`: três funções em ambas as composições, CSRF, recusa de função arbitrária, contexto SGF, saída/reentrada e histórico conservado; sem executar comandos financeiros. Não constitui prova visual. Não é necessário novo build para esta alteração PHP/HTML; nenhuma dependência mudou.
Verificação pública: `https://sgf.tempo.co.mz/` responde 200, `/api/session` responde sem utilizador autenticado e `/demo` responde 404. Não foi encontrada configuração de implantação nas pesquisas documentais/scripts dos projectos, nem ligação de gestão do alojamento disponível nesta sessão. Não foi possível identificar a base pública ou excluir dados reais por leitura pública. A publicação de uma demonstração sintética separada permanece por executar; os endereços locais não são acessíveis a avaliadores externos. Não se removeu autenticação pública nem se alterou o domínio. A preparação actual é específica do host QA local, não um pacote de implantação pronto para o servidor desconhecido. A avaliação pelo responsável permanece suspensa por falta de acesso público, conforme a mensagem posterior; nenhum encerramento/checkpoint presumido.
## Diagnóstico de acesso — prioridade de 29/10/2026
Pedido: recuperar entrada sem novas contas/instâncias, preservar dados, não avançar módulos; eventual reposição de credencial/acesso exige uma confirmação concreta. Nesta passagem não se alterou credencial, concessão ou schema.
| Endereço existente | Base efectiva local | Contas / entrada |
| --- | --- | --- |
| `http://127.0.0.1:8002/avaliar` | `sgf_tempo_test` | Entrada de avaliação existente sem palavra-passe: preparador, validador, técnico e verificador. Também verificadas as credenciais do manifesto original para `gestor@example.test`, `consulta@example.test` e contas de oficina. |
| `http://127.0.0.1:8003` | `budget_core_sgf_4abb58d1cabf` | Quatro contas `*-orcamento@example.test`, acesso separado; não alterado. |
| `http://127.0.0.1:8005/demo` | `compras_receipts_test_51bb71f4189c` | Três funções sintéticas sem palavra-passe; as três credenciais existentes também aceites pelo login normal deste host. |
| `http://127.0.0.1:8006/demo` | `payable_sgf_a70cf23e6cdf` | Três funções sintéticas sem palavra-passe; as três credenciais existentes também aceites pelo login normal deste host. |
| `http://sgf-tempo.test` | `sgf_tempo_dev` | Contas reais locais existentes `nala@tempo.co.mz` e `onala@me.com`; sem tentativa de adivinhar ou repor palavras-passe. |
| `http://compras.test` | `compras_dev` | Conta existente `nala@tempo.co.mz`; verificação de email ainda não registada. As rotas Compras protegidas usam `verified`; isto pode ser uma segunda etapa após autenticação válida, não erro de palavra-passe nem bloqueio fiscal. Não se alterou verificação. |
| `https://sgf.tempo.co.mz` | Não identificável pela leitura pública | Responde 200; sessão anónima. O asset público agora coincide nominalmente com o local (`app-CwyD-u3w.js`), ao contrário da consulta anterior; isso não prova igualdade de bases/contas. Nenhuma credencial local foi enviada ao domínio público. |
O diagnóstico mostra instalações com conjuntos de contas distintos. Os ficheiros `payables-demo-*-access.json` correspondem exclusivamente a 8005/8006, não a todas as instalações. Todas as seis credenciais desses ficheiros coincidem com os hashes locais e foram aceites via HTTP no host correcto; não se reproduziu palavra-passe inválida nesses pares. Não se conhece a combinação concreta tentada pelo responsável, pelo que não se atribui uma causa única ao erro relatado. Os cookies das demonstrações têm nomes distintos; as concessões por contexto continuam separadas.
Procedimento imediatamente utilizável: abrir `http://127.0.0.1:8002/avaliar` e escolher **Preparar e gerir** para explorar o SGF; trocar função pelo ponto de entrada existente. Para Compras, abrir `http://127.0.0.1:8005/demo` e escolher **Preparar** ou **Consultar**. Para o percurso SGF de obrigações, usar `http://127.0.0.1:8006/demo`. Não há palavra-passe a copiar nesses endereços; não se afirma que os cenários estejam reunidos numa única base. Estes endereços são locais, não links para avaliadores externos.
Verificação: `scripts/access-diagnose.php` lê configuração efectiva e contas em transacção PostgreSQL READ ONLY, com rollback e sem imprimir segredos/hashes. `scripts/access-login-check.mjs` verifica as quatro entradas existentes em `/avaliar`, contexto, consulta e saída, e as seis credenciais existentes de obrigações, consulta e saída; prova sanitizada em `docs/proofs/access-recovery.json`. Reexecutada a prova existente de entrada livre nos dois hosts e o check de módulos da demonstração integrada. Não se executou operação de negócio. Asserção inicial do teste de redireccionamento foi corrigida para comparar pathname, pois Laravel pode produzir URL raiz sem barra final; não foi necessário mudar a aplicação. Provas HTTP, sem declaração de revisão visual. Emissão fiscal e acessos de entrada mantêm verificações independentes.
Limite público: acesso administrativo a `sgf.tempo.co.mz` não foi estabelecido; a documentação local de avaliação já regista recusa da chave SSH numa tentativa anterior. Não se repetiu tentativa com outras chaves nem se alterou servidor. Recuperação pública permanece pendente, sem inventar base ou conta remotas. Nenhum novo módulo, conta, instância, alteração de credencial, concessão, publicação ou checkpoint foi efectuado neste diagnóstico.
## Resultado e responsabilidade financeira
Uma factura criada e conferida pelos serviços existentes de Compras origina uma proposta e, por identidade distinta, **uma obrigação reconhecida** no núcleo comum. A origem, fotografia, captura/revisão, decisão e histórico são recuperáveis. O principal é exactamente `total_minor=1160000`, sem recálculo de imposto ou presunção de aplicabilidade fiscal real.