Implementa qualificacao documental com requisitos e analises por versao

This commit is contained in:
2026-10-28 19:28:05 +02:00
parent b7a52e9e00
commit 9138379432
21 changed files with 1677 additions and 11 deletions
+12 -9
View File
@@ -1,7 +1,9 @@
# Proposta de âmbito para qualificação das propostas
Estado: demonstração para validação do produto. Não há implementação de
qualificação na base de negócio nem regras empresariais activadas.
Estado: âmbito documental validado pelo responsável nesta conversa e
implementado em `/requisicoes/{requisition}/qualificacao`. A demonstração
continua disponível separadamente. Não foram activadas regras empresariais
de admissão, exclusão ou adjudicação automática.
Data: 28 de Outubro de 2026.
## Demonstração disponível
@@ -18,13 +20,13 @@ Os dois requisitos iniciais são exemplos genéricos. Não se adoptaram
certificados, valores de facturação, capital, crédito ou prazos dos modelos
históricos como requisitos universais para empresas aderentes.
## Primeiro incremento proposto para a aplicação
## Âmbito documental validado
1. Compras define os requisitos documentais do processo, com categoria,
descrição e indicação da obrigatoriedade segundo a regra desse processo.
Categorias: jurídica, económico-financeira, fiscal, técnica e administrativa.
A categoria não cria um limite financeiro nem uma exigência documental.
Para este primeiro âmbito, propõe-se definição por Compras e análise por
Neste primeiro âmbito, a definição é feita por Compras e a análise por
Compras, Finanças ou chefia do departamento autorizada, com analista distinto
do solicitante e sujeito aos conflitos existentes. Administração consulta.
2. Ao iniciar a análise, guardar a versão dos requisitos e a base das propostas
@@ -65,19 +67,20 @@ Não se propõe presumir um júri ou quórum igual para todas as empresas.
presunção de que os critérios foram divulgados antes de receber propostas.
- Cancelamento de ordens emitidas, estornos, devoluções ou reversões financeiras.
## Validação solicitada
## Validação recebida
Validar o primeiro incremento documental: **requisitos e resultados por
Foi validado o primeiro incremento documental: **requisitos e resultados por
processo, com evidências, fundamento e versões preservadas, sem exclusão ou
adjudicação automática**. A demonstração permite experimentar o preenchimento
antes dessa decisão. A implementação com dados de negócio fica pendente.
adjudicação automática**. A implementação preserva versões e permite registos
independentes por analista. Não cria automaticamente requisitos, análises ou
políticas para empresas reais.
A orientação de continuidade actual pede «definir com a empresa o próximo
âmbito pendente antes de o implementar» em `docs/orientacoes-continuidade.md`.
As alterações locais desse ficheiro e de `docs/compatibilidade.md` e
`docs/desenvolvimento.md` foram preservadas, sem as incluir nesta entrega.
## Verificações da preparação
## Histórico das verificações da preparação
A rota respondeu HTTP 200 com componente `preview/qualification`, utilizador
nulo e apenas propriedades gerais da consulta pública. Três testes existentes
@@ -0,0 +1,51 @@
{
"tested_at_utc": "2026-10-28T17:23:12+00:00",
"separate_database": true,
"transport": "Independent PHP service transactions and PostgreSQL connections",
"scenarios": [
{
"name": "competing_requirements",
"passed": true,
"overlapping_lock_waits": 2,
"requirement_versions": 1,
"analyst_records": 0
},
{
"name": "same_analyst",
"passed": true,
"overlapping_lock_waits": 2,
"requirement_versions": 1,
"analyst_records": 1
},
{
"name": "distinct_analysts",
"passed": true,
"overlapping_lock_waits": 2,
"requirement_versions": 1,
"analyst_records": 2
},
{
"name": "changed_basis",
"passed": true,
"overlapping_lock_waits": 2,
"requirement_versions": 1,
"analyst_records": 0
},
{
"name": "revoked_role",
"passed": true,
"overlapping_lock_waits": 2,
"requirement_versions": 1,
"analyst_records": 0
},
{
"name": "requirements_versus_assessment",
"passed": true,
"overlapping_lock_waits": 2,
"requirement_versions": 2,
"analyst_records": 1
}
],
"passed": true,
"test_database_dropped": true
}
+16
View File
@@ -0,0 +1,16 @@
{
"verified_at_utc": "2026-10-28T17:24:18+00:00",
"migration": "2026_10_28_000018_create_documentary_qualification",
"batch": 19,
"backup_created": true,
"backup_bytes": 296378,
"restore_verified": true,
"restored_tables": 55,
"restore_database_dropped": true,
"business_records_unchanged": true,
"existing_constraints_preserved": true,
"env_unchanged": true,
"qualification_sets_count": 0,
"qualification_assessments_count": 0,
"operational_validation": false
}
+71
View File
@@ -1,5 +1,76 @@
# Validação técnica do SGC — 28 de Outubro de 2026
## Incremento: qualificação documental validada
O responsável validou o primeiro âmbito documental de
`proposta-qualificacao-propostas.md`. Nas propostas existe o acesso
«Qualificação documental», em `/requisicoes/{requisition}/qualificacao`.
Compras define requisitos por processo com descrição, categoria e indicação
de obrigatoriedade segundo a regra desse processo. Não há certificados,
montantes mínimos ou requisitos predefinidos importados dos exemplos.
Ao guardar os requisitos fica preservada uma versão imutável e a base das
propostas. Uma alteração cria outra versão, conservando os dados anteriores.
Compras, Finanças e chefia autorizada analisam, desde que o analista seja
distinto do solicitante e cumpra o âmbito departamental e os conflitos
existentes. Administração consulta. Cada utilizador conserva o seu próprio
registo por proposta e versão dos requisitos; não substitui o de outro analista.
Cada registo contém uma resposta para todos os requisitos: por analisar,
cumprido, não cumprido ou não aplicável. Resultados preenchidos exigem
fundamento; cumprido/não cumprido exigem também referência de evidência.
Não aplicável exige justificação e não dispensa automaticamente um requisito
obrigatório. Uma correcção acrescenta uma versão da análise e exige o
identificador do último registo do próprio analista.
Bases alteradas ou requisitos ultrapassados não aceitam novas análises.
Os registos antigos continuam consultáveis com indicação histórica, sem
copiar respostas para outra base. Os requisitos e a base são conferidos
novamente dentro de uma transacção que bloqueia primeiro a empresa e
revalida o operador. Após adjudicação, ou fora do estado aprovado do pedido,
os registos anteriores permanecem em consulta, sem novas escritas.
O módulo não decide admissão/exclusão e não usa os resultados para alterar
elegibilidade, pontuações, ordenação ou emissão. O método de comparação
permanece intacto; continuam aplicáveis os conflitos existentes. Um teste
de integração regista «não cumprido» num requisito obrigatório e confirma
que a matriz é idêntica e que uma adjudicação antes elegível segue o circuito
normal até à emissão, sem criar uma regra automática adicional.
Consulta exige os mesmos perfis e visibilidade das propostas, respeitando
empresa e departamento. Solicitantes e Armazém não ganham acesso. Respostas
usam `private, no-store` e histórico Inertia cifrado. O histórico é paginado
e o último registo de cada analista/proposta é obtido separadamente, sem
confundir uma página histórica com a versão actual de trabalho. A visão única
inclui ligação e eventos conforme o perfil.
A migração aditiva 000018 foi aplicada no batch 19, após backup privado de
296378 bytes e restauro verificado de 55 tabelas. Dados anteriores, restrições
e `.env` foram preservados; as tabelas de requisitos e análises ficaram
vazias na base de negócio. Ver `qualificacao-migracao-000018.json`. Backup e
manifesto permanecem fora do Git.
Seis cenários PostgreSQL passaram com duas ligações e duas esperas simultâneas
de bloqueio: requisitos concorrentes, duas escritas do mesmo analista,
analistas distintos, base alterada, perfil revogado e requisitos novos em
disputa com uma análise da versão anterior. Não houve substituição de
analistas, mistura de bases ou duplicação de versões. A base exclusiva de
testes foi eliminada. Ver `qualificacao-concorrencia-postgresql.json`.
As alterações locais em `compatibilidade.md`, `desenvolvimento.md` e
`orientacoes-continuidade.md` foram preservadas e não fazem parte deste
incremento. A revisão visual permanece pendente: o navegador devolveu
`The browser access host is unavailable`. Admissão/exclusão formal, circuitos
de conferência/quórum, novos métodos de avaliação, certificação de evidências
e cancelamento de ordens emitidas continuam sem activação neste âmbito.
Resultado deste incremento: **454 testes aprovados, 2 ignorados e 3601
asserções**. São 11 testes novos: dez específicos do módulo e um de integração
com adjudicação/emissão. PHPStan, Pint, TypeScript, build e lint/formatação
dos ficheiros alterados passaram. A formatação global continua a assinalar
`compatibilidade.md`, já modificado fora desta entrega; não foi alterado nem
incluído no commit. Os dois testes ignorados continuam condicionados a MFA.
## Incremento: sessão de abertura e actas por versão
Nas propostas existe o acesso «Sessão de abertura e actas», em