Implementa admissão formal por política e adopção do processo

This commit is contained in:
2026-10-28 20:28:15 +02:00
parent 03ab308e02
commit d020be53ed
33 changed files with 1926 additions and 30 deletions
@@ -0,0 +1,51 @@
{
"tested_at_utc": "2026-10-28T18:21:31+00:00",
"separate_database": true,
"transport": "Independent PHP service transactions and PostgreSQL connections",
"scenarios": [
{
"name": "same_person",
"passed": true,
"overlapping_lock_waits": 2,
"reviews": 1,
"state": "pending"
},
{
"name": "distinct_people",
"passed": true,
"overlapping_lock_waits": 2,
"reviews": 2,
"state": "confirmed"
},
{
"name": "opposing_reviews",
"passed": true,
"overlapping_lock_waits": 2,
"reviews": 1,
"state": "pending"
},
{
"name": "revoked_role",
"passed": true,
"overlapping_lock_waits": 2,
"reviews": 0,
"state": "pending"
},
{
"name": "changed_basis",
"passed": true,
"overlapping_lock_waits": 2,
"reviews": 0,
"state": "pending"
},
{
"name": "new_adoption",
"passed": true,
"overlapping_lock_waits": 2,
"reviews": 0,
"state": "pending"
}
],
"passed": true,
"test_database_dropped": true
}
+16
View File
@@ -0,0 +1,16 @@
{
"verified_at_utc": "2026-10-28T18:23:41+00:00",
"migration": "2026_10_28_000019_create_formal_admission",
"batch": 20,
"backup_created": true,
"backup_bytes": 306342,
"restore_verified": true,
"restored_tables": 57,
"restore_database_dropped": true,
"business_records_unchanged": true,
"existing_constraints_preserved": true,
"env_unchanged": true,
"admission_policies_count": 0,
"admission_adoptions_count": 0,
"operational_validation": false
}
+26 -16
View File
@@ -1,10 +1,10 @@
# Proposta de âmbito para admissão e exclusão de propostas
Estado: proposta para validação. Não implementa decisões formais na base de
negócio e não activa regras de exclusão ou adjudicação. Data: 28 de Outubro
de 2026.
Estado: âmbito validado pelo utilizador e implementado em 28 de Outubro de 2026. O circuito real é opcional por empresa e por processo; nenhuma política
real foi criada ou activada durante esta entrega. A demonstração pública
continua separada dos registos autenticados.
## Resultado preparado para revisão
## Demonstração preparada antes da validação
`/proposta/admissao` demonstra configuração de conferentes e quantidade de
confirmações, proposta manual por Compras, conferência fundamentada por
@@ -18,7 +18,7 @@ um quórum imposto às empresas. Nenhum valor financeiro dos exemplos locais
é utilizado. Os casos A/B/C são exemplos de análise sem pendências, requisito
obrigatório não cumprido e pendência/divergência, respectivamente.
## Primeiro circuito proposto
## Circuito inicial validado
1. Administração da empresa configura e activa expressamente uma política
versionada: perfis de conferência e quantidade de pessoas distintas exigida.
@@ -57,8 +57,11 @@ obrigatório não cumprido e pendência/divergência, respectivamente.
aplicável podem entrar na selecção de adjudicação. Uma exclusão ou pedido
de esclarecimento não substitui admissão. Admissão não autoriza compra:
mantêm-se pontuação, conflitos, orçamento e aprovação do valor final.
A implementação deverá guardar a base de admissão na adjudicação e
verificar coerência antes da emissão. Não se alteram ordens já emitidas.
A implementação guarda a base de admissão na adjudicação e na ordem e
verifica coerência antes da emissão. Não se alteram ordens já emitidas.
Mantêm-se o mínimo existente de três fornecedores elegíveis e duas
avaliações por proposta. Neste regime, os três fornecedores precisam
também de propostas admitidas; não se implementou uma dispensa do mínimo.
Estas são escolhas propostas para o primeiro circuito suportado, não normas
legais ou obrigações universais deduzidas dos modelos históricos. Cada empresa
@@ -76,28 +79,35 @@ validação solicitada é do âmbito do produto; não publica políticas reais.
decisão de admissão/exclusão.
- Cancelamento de ordens, devoluções, estornos ou reversões financeiras.
## Verificações previstas para a implementação
## Verificações da implementação
Identidade e segregação no servidor; política/base preservadas; requisitos
pendentes ou obrigatórios não resolvidos; conferências repetidas; devolução;
perfil/departamento revogado; empresas diferentes; tentativas desactualizadas;
admissão versus adjudicação/emissão; rollback de auditoria e concorrência
PostgreSQL. A demonstração não substitui estes testes da futura implementação.
PostgreSQL. Os resultados efectivos estão em `docs/validacao-tecnica.md`;
a demonstração não substitui os testes da implementação autenticada.
## Decisão solicitada
## Validação recebida e activação
Validar o circuito inicial: **decisão manual por Compras, confirmações
O utilizador validou o circuito inicial: **decisão manual por Compras, confirmações
independentes em quantidade/perfis definidos pela empresa e integração na
adjudicação apenas por adopção explícita do regime**, sem admitir propostas
com pendências ou requisitos obrigatórios não resolvidos neste primeiro âmbito.
Pausa-se a implementação com dados reais para esta validação, conforme a
orientação de continuidade: «definir com a empresa o próximo âmbito pendente
antes de o implementar», em `docs/orientacoes-continuidade.md`. A autorização
anterior da qualificação era documental e não activava admissão/exclusão.
Esta validação autoriza a implementação do produto, sem publicar uma política
por conta das aderentes. A Administração configura `/politica-admissao` com
quantidade e perfis expressos. Compras adopta essa versão em
`/requisicoes/{requisition}/admissao` antes de adjudicar. Sem adopção, mantém-se
o circuito anterior. A desactivação geral impede novas adopções, preservando
as versões já adoptadas. Uma nova tentativa substitui a anterior para efeitos
de elegibilidade, sem apagar o histórico. O limite de 50 confirmações no
formulário é técnico, não um quórum empresarial; assegurar pessoas elegíveis
em número suficiente é responsabilidade da configuração da empresa.
As alterações locais dos três documentos de continuidade foram preservadas.
## Verificações da preparação
## Histórico: verificações da preparação da demonstração
TypeScript, build, Pint e lint/formatação dos ficheiros desta proposta
passaram. Os três testes existentes de consulta pública passaram, com 39
+88
View File
@@ -1,5 +1,93 @@
# Validação técnica do SGC — 28 de Outubro de 2026
## Incremento: admissão e exclusão por adopção expressa
O utilizador validou `docs/proposta-admissao-exclusao.md`. A Administração da
empresa pode registar versões da política em `/politica-admissao`, indicando
expressamente perfis de conferência (Finanças e/ou chefia do departamento),
quantidade de pessoas distintas e fundamento. Não há quantidade nem perfis
pré-seleccionados. O máximo de 50 no formulário é um limite técnico, não uma
regra empresarial. A disponibilidade de pessoas elegíveis deve acompanhar a
configuração da empresa.
Compras adopta a política activa em `/requisicoes/{requisition}/admissao`,
num pedido aprovado e antes de adjudicar. Sem adopção, mantém-se o circuito
existente. A política adoptada fica preservada; desactivar a política geral
impede novas adopções e não reescreve processos existentes. Aplicar outra
versão exige nova adopção expressa e novas decisões/conferências. Não há
regresso implícito ao circuito sem admissão.
Compras propõe admitir, excluir ou pedir esclarecimento interno por proposta,
com fundamento e base preservada de requisitos, propostas e últimas análises
de cada analista. O proponente não pode ser o solicitante. Admitir exige
análise existente sem pendências, respostas em falta ou divergências e com
todos os requisitos obrigatórios cumpridos. Um requisito facultativo
uniformemente não cumprido ou não aplicável não constitui, por si, uma
dispensa de requisito obrigatório.
Os conferentes são pessoas distintas, da mesma empresa, com perfil e
departamento ainda elegíveis, diferentes do solicitante e do proponente,
sem conflito de interesses. Uma conferência repetida com conteúdo idêntico
é idempotente e conta uma vez; outra resposta não reescreve a assinatura.
Uma devolução termina a tentativa sem excluir automaticamente o concorrente.
Corrigir cria nova tentativa, sem copiar confirmações. Antes de concluir o
quórum, as confirmações anteriores são revalidadas; uma decisão concluída
conserva a elegibilidade verificada na sua data. Uma alteração de base,
tentativa ou adopção invalida a utilização de conferências antigas.
A comparação usa o cálculo ponderado existente. Nos processos que adoptaram
o regime, só propostas com admissão confirmada e actual são elegíveis.
Mantêm-se os mínimos existentes de três fornecedores elegíveis e duas
avaliações por proposta, sem dispensas novas. A base da admissão fica na
adjudicação e na ordem; é revalidada antes de aprovar/emitir. Não se aplicam
regras retroactivas a adjudicações/ordens existentes nem se reemitem ordens
já emitidas. A admissão, sozinha, não movimenta orçamento, facturas ou
pagamentos. O relatório de conferência identifica o regime adoptado; o
processo completo liga às decisões e apresenta os eventos de auditoria.
As novas páginas usam o cabeçalho, rodapé e navegação partilhados. O título
HTML inicial foi corrigido de `ProcuraFlow` para **Sistema de Gestão de
Compras (SGC)**, sem modificar `.env`. O nome visível das novas páginas
segue a mesma identificação.
Migração `000019`, lote **20**, aplicada em `compras_dev` após backup privado
de **306342 bytes**, verificado por restauro numa base separada e eliminada
após a conferência. Foram verificadas **57 tabelas anteriores**, registos de
negócio por projecção das colunas originais, restrições existentes, histórico
de migrações e integridade de `.env`. A migração acrescenta quatro tabelas e
um campo JSON anulável na adjudicação. As quatro tabelas reais estão vazias;
nenhuma política foi publicada por conta das aderentes. O relatório sanitizado
está em `docs/admissao-migracao-000019.json`; o backup/manifesto permanecem
privados, fora do Git. O rollback automático destrutivo está impedido.
Os seis cenários em `docs/admissao-concorrencia-postgresql.json` passaram
com ligações/processos PHP independentes e dois bloqueios simultâneos
observados no PostgreSQL: mesma pessoa, pessoas distintas, respostas
opostas, perfil revogado, base alterada e nova adopção durante a espera.
Conferências, quórum e auditoria foram conferidos; a base de teste foi
eliminada. Não se apresenta esta bateria como um teste de corrida de emissão.
Resultado final do servidor: **478 testes aprovados, 2 ignorados e 3887
asserções**. A bateria inclui os 13 cenários novos de admissão e quatro de
integração real com adjudicação/emissão: base preservada na ordem,
pontuações mantidas, exclusão e mínimo de fornecedores, alterações antes da
emissão, repetição de emissão e adjudicação anterior sem adopção retroactiva.
Os 94 testes dos módulos directamente relacionados também passaram após a
integração do histórico e do campo preservado na ordem. PHPStan e Pint
passaram. TypeScript, build e lint/formatação dos ficheiros deste âmbito
passaram; a verificação global continua limitada pela formatação alheia
indicada abaixo. HTTP 200 confirmado para início, demonstração de admissão
e login, todos com o título inicial Sistema de Gestão de Compras (SGC).
O navegador continua a devolver `The browser access host is unavailable`.
Permanecem pendentes a revisão visual pública, autenticada e de impressão e
as interacções no navegador. As verificações HTTP e automatizadas não a
substituem. Recomendação formal em etapas, excepções/dispensas, comunicação
externa e cancelamento de ordens emitidas ficam fora desta entrega.
Os três documentos locais de continuidade foram preservados sem os incluir
no commit. A formatação global de `docs/compatibilidade.md`, alteração alheia,
continua pendente; a verificação de âmbito exclui esse ficheiro.
## Incremento: relatório de conferência e impressão
As propostas e a visão única do processo incluem o acesso a