Implementa planeamento de compras com marcos e responsabilidades por empresa

This commit is contained in:
2026-10-28 18:30:41 +02:00
parent 76d2463f36
commit 513f430edf
18 changed files with 1604 additions and 2 deletions
+7
View File
@@ -1,5 +1,12 @@
# Exemplos locais para organizar o processo de compras
Evolução do roteiro: a visão única foi entregue em `76d2463`. O incremento de
planeamento acrescenta itens por empresa, responsáveis, marcos e datas
previstas/realizadas, com ligação posterior às requisições. Actas, qualificação
específica e avaliação em novas modalidades continuam por implementar. Estes
avanços não importam os processos históricos nem aprovam as regras de
cancelamento de ordens emitidas.
Análise de 28 de Outubro de 2026. Os quatro ficheiros indicados pelo responsável
são **exemplos**, conforme instrução expressa. Não aprovam regras do SGC,
não autorizam operações e não são parâmetros comuns às empresas aderentes.
@@ -0,0 +1,33 @@
{
"tested_at_utc": "2026-10-28T16:26:56+00:00",
"separate_database": true,
"transport": "Independent PHP service transactions and PostgreSQL connections",
"scenarios": [
{
"name": "competing_dates",
"passed": true,
"overlapping_lock_waits": 2,
"successful_audit_entries": 1
},
{
"name": "competing_responsibles",
"passed": true,
"overlapping_lock_waits": 2,
"successful_audit_entries": 1
},
{
"name": "duplicate_milestone",
"passed": true,
"overlapping_lock_waits": 2,
"successful_audit_entries": 1
},
{
"name": "revoked_role",
"passed": true,
"overlapping_lock_waits": 2,
"successful_audit_entries": 0
}
],
"passed": true,
"test_database_dropped": true
}
+16
View File
@@ -0,0 +1,16 @@
{
"verified_at_utc": "2026-10-28T16:27:35+00:00",
"migration": "2026_10_28_000016_create_purchase_planning",
"batch": 17,
"backup_created": true,
"backup_bytes": 281059,
"restore_verified": true,
"restored_tables": 52,
"restore_database_dropped": true,
"business_records_unchanged": true,
"existing_constraints_preserved": true,
"env_unchanged": true,
"purchase_plan_items_count": 0,
"purchase_plan_milestones_count": 0,
"operational_validation": false
}
+63
View File
@@ -1,5 +1,68 @@
# Validação técnica do SGC — 28 de Outubro de 2026
## Incremento: planeamento por empresa
O menu Compras inclui `/planeamento`. Administração e Compras registam itens
para bens, obras, serviços ou consultoria, seleccionam departamento e
responsável da própria empresa e definem marcos com nomes e datas próprios.
Estas naturezas são classificações de acompanhamento, não novas modalidades
de contratação. Não existem marcos obrigatórios ou valores financeiros
predefinidos, e o plano não cria reservas ou aprovações.
Uma compra pode ser planeada antes da requisição. Administração ou Compras
podem depois ligar uma requisição visível, do mesmo departamento, com
fundamento. A ligação é única e não substitui uma anterior. A visão única do
processo oferece um atalho para o item do plano quando o utilizador também
tem acesso a esse item; o filtro `?item=` conserva as mesmas permissões.
O responsável atribuído regista ou corrige datas realizadas e indica o
fundamento. Administração e Compras também podem rever datas previstas e
reatribuir responsáveis. Datas realizadas futuras são recusadas. Todas as
alterações guardam autor, valores anteriores, novos valores e fundamento,
com versão optimista e bloqueio da empresa para impedir sobrescrita silenciosa.
Uma data realizada é uma declaração de acompanhamento: não confirma entregas,
facturas, pagamentos ou execução integral da compra.
Administração, Compras e Finanças consultam o plano da empresa. Chefias
consultam o departamento ou itens de que são responsáveis; os restantes
perfis consultam apenas os itens atribuídos. Só Administração e Compras
definem o plano e consultam o histórico geral. Finanças não ganha permissão
de edição por ser leitor; um responsável pode registar datas realizadas no
seu item. Uma atribuição não dá acesso à requisição ou aos seus documentos
se as permissões normais não o permitirem. Dados de outras empresas, opções
de equipa e histórico geral não são expostos a utilizadores sem acesso.
A migração aditiva 000016 foi aplicada no batch 17 após backup privado de
281059 bytes e restauro verificado de 52 tabelas. Dados anteriores, restrições
e `.env` foram preservados. As duas tabelas novas ficaram vazias: não foram
criadas compras ou datas fictícias na base de negócio. Ver relatório
`planeamento-migracao-000016.json`; os ficheiros privados de recuperação
permanecem fora do Git.
Treze testes específicos verificam criação, marcos livres, datas realizadas,
reprogramação e versão, rejeição de datas futuras e ausência de fundamento,
perfis, empresas, departamentos, ligação única e posterior, reatribuição,
revogação de perfil, rollback de auditoria e acesso ao processo ligado.
Quatro cenários PostgreSQL com duas ligações e duas esperas simultâneas
passaram: datas concorrentes, responsáveis concorrentes, marcos duplicados e
perfil revogado enquanto os operadores aguardam o bloqueio. Cada escrita
aceite produz um único evento; a base temporária exclusiva foi eliminada.
Ver `planeamento-concorrencia-postgresql.json`.
O histórico apresenta os 50 eventos de planeamento mais recentes da empresa.
Título, natureza e departamento são definidos na criação; as revisões deste
âmbito abrangem responsável, ligação posterior e datas dos marcos. Não há
eliminação de itens ou marcos. Estimativas financeiras do plano, aprovações
do plano, importação dos exemplos, alertas automáticos, dependências entre
marcos, actas e novas modalidades continuam fora deste primeiro incremento.
A revisão visual continua pendente, devido à indisponibilidade do navegador.
Resultado deste incremento: **432 testes aprovados, 2 ignorados, 3336 asserções**;
**4 cenários concorrentes PostgreSQL aprovados**. PHPStan, Pint, TypeScript,
lint/formatação e build passaram. O navegador voltou a responder
`The browser access host is unavailable`. Não se declara revisão visual
concluída nem validação operacional de regras ou orçamentos das empresas.
## Incremento: visão única do processo de compra
O detalhe de uma requisição inclui o acesso «Ver processo completo», em