Implementa qualificacao documental com requisitos e analises por versao
This commit is contained in:
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user