commit9
tests / ci (push) Canceled after 0s

This commit is contained in:
2026-10-30 20:02:30 +02:00
parent 6d14b4e6f0
commit c6373365bf
225 changed files with 15365 additions and 285 deletions
+61
View File
@@ -1,5 +1,66 @@
# Continuidade do desenvolvimento do SGC
**Retoma — triagem e avaliação, 30/10/2026:** decisão explícita de preparador atribuído em `/pessoas/{process}/recebidas/{submission}/triagem`, com ausência de conflito, motivo reservado e mensagem pública distintos. «Aceite para análise» cria candidatura interna a partir dos dados congelados, sem usar o perfil actual, associar por nome ou incluir automaticamente em base. «Não aceite para análise» não cria candidatura interna. Decisão/operação preservadas, retries idênticos idempotentes, revisão/reabertura ainda pendentes. Actor importador fica em `created_by`, mantendo independência na avaliação/aprovação; fonte electrónica e versão do perfil identificadas na matriz/relatório. Titular só recebe estado/data/mensagem pública, sem motivo interno ou ID interno. Preparadores e avaliadores expressamente autorizados a evidências/entrevistas consultam fontes; só preparador com função/atribuição actuais decide/publica. Painel oferece triagem antes de avaliar; fecho/avaliação/selecção verificam pendências. Não admitir novas candidaturas após começar a avaliação; não fundir referências manuais coincidentes. Migração 40 apenas 8005: backup/restauro e 103 tabelas antigas preservadas, tabela nova vazia, sem transferências automáticas, contas/grants, emails, IA ou domínio. Provas `proofs/candidate-triage*.json`. Próximo incremento: anexos verificados e complementos/revisões, depois modalidades espontâneas/fornecedores. Visual pendente; não declarar portal integralmente concluído.
**Retoma — acesso e submissões electrónicas, 30/10/2026:** confirmação de email e recuperação implementadas, Mail::fake nos ensaios, transporte real indisponível e nenhum email enviado. Tokens SHA-256, segredo em fragmento/POST, expiração/utilização única, auditoria, invalidade após reenvio e revogação de sessões por versão na recuperação. Ler estado actual da conta ao autorizar, inclusive depois de locks, para não aceitar sessões antigas. Email confirmado não significa identidade validada. Sem token em logs ou flash. APP_URL configurado é a origem das ligações; não usar Host do pedido. Nova publicação explícita por preparador de Pessoas, formulário congelado do processo, candidatura de dados/comprovativo e consulta restrita pelo titular/preparador. Não divulgar propósito interno, critérios internos, selecção ou notas. Antes de consultar PeopleProcess no canal externo, retirar apenas o scope global de tenant e aplicar tenant explícito da rota/conta, além da publicação/prazo; nunca depender da sessão interna no mesmo browser. Não inserir candidato externo automaticamente em users/people_registry/people_applications. Recepção não é aceitação para análise, inclusão na base ou selecção. Formulários com anexos obrigatórios não podem publicar neste percurso enquanto não existir recepção/verificação de ficheiros; não retirar esses requisitos para contornar. Próximo: anexos verificados, triagem e ligação à avaliação sem redigitação, complementos/revisões e modalidades espontâneas/fornecedores. Migrações 38/39 locais 8005, backup/restauro, 100 tabelas anteriores preservadas, três novas vazias. Sem portal aberto, candidato criado, email real, IA, domínio ou aceitação visual. Provas `proofs/candidate-submissions*.json`.
**Retoma — área externa do candidato, 30/10/2026:** implementado guard `candidate` e tabelas próprias, configuração de portal por empresa (aviso versionado/novos registos), entrada/saída, perfil próprio com versões preservadas e disponibilidade província/distrito/localidade. Contas externas não são utilizadores internos; não mudar o guard por omissão, reutilizar `User` ou expor props internas nas rotas `candidaturas/*`. Candidatos não recebem acesso a avaliações. Sem portal configurado: 404; fechado a novos registos: titulares mantêm entrada/perfil. Reconhecimento do aviso não autoriza bolsa/partilha. Email/identidade ainda não verificados e recuperação/MFA externo pendentes; apresentação de candidaturas/anexos também pendente. Não declarar a área pronta para utilização comercial integral. Migração 000037 apenas 8005, backup/restauro e 96 tabelas anteriores preservados, quatro tabelas novas vazias, nenhum portal aberto ou candidato criado automaticamente. Provas `proofs/candidate-portal*.json`. Próximo: verificação/recuperação de conta, ligação de submissão e documentos verificados/comprovativo/triagem, preservando versões e configuração por modalidade. Sem emails, IA, domínio ou aceitação visual neste incremento.
**Retoma — candidaturas electrónicas, 30/10/2026:** proprietário aprovou a abordagem faseada proposta na análise do Word e pediu disponibilidade por província, distrito e localidade. Primeiro incremento implementado: `/administracao/candidaturas/formularios`, ligado à Parametrização, seis modalidades separadas por roteiro/tipo e com/sem concurso. Campos/documentos parametrizáveis, histórico completo por inserção, auditoria e concorrência. Novos processos de Pessoas congelam a versão do formulário na criação, mantendo as protecções SQL anteriores; não alterar regras de processos já existentes. «Prevista para recepção» é intenção configurada, não portal aberto. Sem registos criados automaticamente. Disponibilidade geográfica é um campo estruturado distinto da morada, inicialmente obrigatório nos modelos ainda não guardados de pessoas; validador exige os três níveis quando preenchido. Falta cadastro territorial oficial/múltiplas localizações e integração na área do interessado. Migração 000036 local 8005, backup/restauro fresco, 95 tabelas anteriores preservadas, nova tabela vazia. Provas `proofs/submission-forms*.json`. Próximo: identidade externa/perfil, candidatura e anexos verificados/comprovativo, triagem/complementos/revisões. Estados «Aceite para análise» e «Incluído na base» separados no futuro circuito. Não expor notas internas, fundir pessoas por nome ou reutilizar perfis entre empresas sem autorização. Não adoptar prazos/consentimentos/limites do Word como aprovados; ainda não activados. Sem novas chamadas IA, publicação no domínio ou aceitação visual.
## Reutilização de artigos em Compras, 30 de Outubro de 2026
Catálogo baseado nos artigos existentes do armazém, com publicação explícita e auditada por administrador/armazém. Solicitantes seleccionam apenas artigos publicados da empresa, sem acesso a saldos. Descrição, unidade, categoria e tipo vêm do servidor; quantidade, preço e IVA são dados do pedido. Fonte/versão preservadas por linha e na ordem. Actualizações do cadastro não reescrevem pedidos existentes; selecção de nova versão é explícita. Recepção pré-preenche o artigo da ordem e rejeita outro ID, mantendo qualidade, quantidades e independência. Insumos/outros bens cobertos; equipamentos/peças seguem roteiro técnico, serviços continuam manuais.
Migração 000035 apenas na avaliação 8005, backup/restauro fresco conferido, 94 tabelas anteriores preservadas e catálogo vazio; sem contas/grants, ligação automática de históricos, IA ou instalação no domínio. Suíte integral: 703 totais, 701 aprovados, dois ignorados anteriores, 6 828 asserções. PostgreSQL isolado: 35 testes/252 asserções. React: 47 testes. Tipos/PHPStan/Pint/build aprovados; provas em `proofs/requisition-catalogue.json` e ficheiros associados. Conferência visual pendente por indisponibilidade já registada do conector; testes automáticos não a substituem.
Próxima lacuna: modelos de documentos versionados por empresa, variáveis preenchidas a partir de fontes autorizadas e termos específicos novos. Conferir associações e relatórios na matriz `reutilizacao-dados.md`; reconciliação histórica exige identidade/autorização, sem fusão por nome. Não declarar o requisito transversal integralmente concluído.
**Registar uma vez/reutilizar — Pessoas, 30/10/2026:** implementado cadastro próprio/partilhado por permissões, nome/referência/perfil, versão/auditoria/arquivo. Primeira candidatura pode guardar perfil no mesmo acto; seguintes seleccionam fonte autorizada. Nome e snapshot vêm do servidor; dados específicos da candidatura não reescrevem cadastro. Snapshot e referência/versão preservados por processo, actualizações/arquivo não alteram histórico; sem duplicar pessoa ligada no mesmo processo ou fundir nomes. Preparador consulta próprios, capacidades `people_registry_read/manage` dão âmbito partilhado; administrador não recebe leitura alheia automática, cadastro não dá acesso aos processos. Migração 000034 apenas em 8005: backup/restauro e 93 tabelas antigas preservados, nova tabela vazia, duas colunas nulas em candidaturas antigas, sem pessoas/grants/importação. Provas `people-registry.json`, `people-registry-install.json`, `people-registry-pg.json`. PHP integral 698/696 aprovados/dois ignorados, 6 739 asserções; módulo/PG 43/1124; React 44; menu seis grupos/111 acessos. Visual/domínio pendentes. Matriz `reutilizacao-dados.md`: requisito global ainda não concluído; próximos catálogo genérico de artigos, modelos documentais e reconciliação assistida de históricos. Não depende de IA; nenhuma chamada paga repetida.
**Garantia comercial sem IA, 30/10/2026:** proprietário confirmou que as funcionalidades prometidas têm de permanecer disponíveis. Requisito permanente em `AGENTS.md`: SGC base independente do adicional de IA; sem chave/crédito/subscrição/fornecedor não bloqueiam os percursos normais ou relatórios. Indicadores/alertas/sínteses locais fazem parte do núcleo. Preservar documentos, decisões e resultados incorporados após cancelar IA; não mover funções aprovadas do núcleo para o adicional. Aplicar nas futuras integrações, reservas, limites e cobrança, mantendo permissões e auditoria. Conferidos controlos/testes existentes e reutilizada prova `ai-plan.json`; alteração documental, sem novas chamadas/dados/código. Pendências funcionais continuam pendentes, sem alegar conclusão integral.
**Plano IA por empresa, 30/10/2026:** Administração prepara fornecedor/modelo, percursos, categorias de factos, orçamento e pedidos mensais e limites por pedido; sempre rascunho, versão/motivo/auditoria, preservando escolhas locais. Relatórios pré-visualizam factos já autorizados, filtrados por plano/actor, sem nomes, referências pessoais, notas livres, dados bancários ou hashes; âmbito vazio/excluído e excesso de bytes explícitos. Sem chamadas pagas, migrações ou escolhas gravadas automaticamente na avaliação. Orçamentos são planeados: ainda sem ledger/reservas/credenciais por empresa ou execução, `external_execution_enabled=false`, `usage_checked=false`. Modelo proposto ainda exige validar compatibilidade. Documento `plano-ia.md`, prova `ai-plan.json`. Próximo passo: contrato de consumo/reserva atómica, transporte/credencial por organização, revalidação de fontes/política/acessos e activação explícita. Não repetir o ensaio fictício concluído; visual/publicação pendentes.
**Ensaio IA concluído, 30/10/2026:** proprietário configurou a chave; corrigidas apenas duplicação/atribuição embutida no `.env`, sem divulgar segredo. CA de raízes confiadas do Windows aplicada apenas ao processo PHP, mantendo verificação TLS. Histórico: falha TLS, 401 por chave malformada e uma geração HTTP 200; sem repetição automática. Três factos fictícios preservados, fontes completas e conteúdo conferido; 204 tokens entrada/81 saída, custo textual teórico US$0,001380, débito de créditos Pro não consultado. `proofs/ai-rehearsal-live.json` e `ensaio-ia.md` substituem o estado histórico de espera por credencial. Autorização de uma geração consumida; não repetir por arrasto. Serviço externo continua desactivado nos fluxos reais. Sem dados reais ou alterações de negócio. Próximo passo: configuração de fornecedor/consumo por empresa e avaliação ampliada; visual/domínio pendentes.
**Sínteses configuráveis e avaliação sem API, 30/10/2026:** Administração > Parametrização permite escolher sínteses locais de Compras/Pessoas separadamente por empresa, com revisão, versão, motivo e auditoria. Ocultar resumo não retira relatório ou permissões. Sem segredos/activação externa nesta interface. Migração 000033 apenas em 8005, backup/restauro e 93 tabelas conferidos, novo campo de política nulo em todas as empresas, sem alterar contas/grants. Prova `intelligence-policy-install.json`. `sgc:ai-assess` e métricas do ensaio futuro medem cobertura/fontes/correspondência literal, sem certificar verdade semântica ou usar rede. Fixture manual sintética avaliada, não saída de IA. PHP 82/1337, React 33, PostgreSQL um cenário/110 asserções, tipos/PHPStan/lint/build nas provas `intelligence-policy.json`. Provas integrais reutilizadas. Chamada paga continua autorizada e não executada; aguardar credencial sem pedir nova autorização. Configuração de fornecedor/documentos reais/consumo por empresa ainda pendente, assim como visual e domínio.
**Ensaio IA autorizado — credencial em falta, 30/10/2026:** o proprietário respondeu «pode sim» após a estimativa de US$0,01–0,02 para a chamada preparada. Autorização válida para uma única chamada paga à OpenAI, modelo `gpt-5.6-terra`, três factos fictícios e saída até 1 000 tokens. Verificação local revelou ensaio desactivado e ausência de credencial específica e `OPENAI_API_KEY` disponível; nenhum pedido enviado. Falta configurar `SGC_AI_REHEARSAL_API_KEY` no servidor, sem a transmitir nesta conversa. Não pedir nova autorização para a mesma chamada. Preferir activação apenas no processo do comando, mantendo o serviço externo desactivado no portal. Prova `proofs/ai-rehearsal-authorization.json`; o estado «autorização pendente» nos registos anteriores é histórico e foi superado por esta decisão.
**Ensaio IA preparado, 30/10/2026:** `sgc:ai-rehearsal` pré-visualiza três factos fictícios sem rede/base. Adaptador OpenAI Responses testado por HTTP simulado: 15/41, PHPStan aprovado. Uma chamada manual `--live`, modelo inicial `gpt-5.6-terra`, entrada até 4 500 bytes, saída até 1 000 tokens, schema/fontes validados, sem ferramentas, repetição ou redireccionamento. Sem dados reais, IDs de processo, anexos ou texto livre; não ligado a rotas/filas/relatórios. Chamada real ainda não executada; falta autorização para serviço externo pago e credencial no servidor, sem a enviar na conversa. Rever `ensaio-ia.md` e `proofs/ai-rehearsal.json`. Validade de citação não é garantia de verdade; revisão humana obrigatória no ensaio. Parametrização de IA por empresa e activação sobre documentos reais ainda não implementadas. Conferência visual tentada: pipe nativo Windows indisponível (`os error 2`) e browser host indisponível; sem superfícies, sem contorno e sem demonstrar falha do portal. Não confundir com pendência de publicação.
**Síntese com fontes, 30/10/2026:** relatórios individuais de Compras e Pessoas ganharam sínteses factuais próprias, com secções de origem, caminhos dos dados e SHA-256 da base. Projecções já autorizadas/redigidas, sem queries adicionais/cache/transmissão/escrita. Finanças reservadas fora do texto e hash. Compras distingue estado/qualificação actual ou antiga/acta/ordem/recepções/pagamentos, sem recomendação de vencedor nem aprovação. Pessoas distingue matriz actual/base de selecção preservada, proposta pendente/devolvida/aprovada, minuta interna e esclarecimentos posteriores; não classifica pessoas ou presume assinatura/admissão. Detalhe de Pessoas agora usa leitura transaccional e snapshot read-only/repeatable-read em PostgreSQL normal. Método por regras identificado; não alegar IA generativa, ML ou leitura de anexos activos. Referência não equivale a assinatura ou decisão persistida. Provas `proofs/evidence-brief.json`: PHP Compras 18/317 e Pessoas 35/972, PostgreSQL um cenário/64 asserções, React 31, tipos/PHPStan/lint/build. Visual e domínio pendentes; provas integrais reutilizadas. Próxima evolução de inteligência: configuração por organização e ensaio de fornecedor com corpus sintético/avaliação, preservando fontes e permissões antes de qualquer activação externa. Orientação do proprietário: prosseguir nas etapas autorizadas sem confirmação corrente; pedir autorização apenas quando concretamente necessária.
**Retoma — inteligência de Compras, 30/10/2026:** leitura operacional em `/relatorios`, sobre todo o filtro autorizado e mesmo snapshot: aprovação pendente, cinco submissões mais antigas com origem, antiguidade desconhecida, data de necessidade ultrapassada antes de aprovação e aprovadas sem propostas/ordem visível. Data de necessidade não é prazo de entrega; contagem de propostas não mede comparabilidade; ausência não prova incumprimento. CSV preservado, sem migrações, permissões novas ou escritas de negócio. Catálogo `indicadores-sgc.md` define os dois domínios; roteiro actualizado em `inteligencia-sgc.md`. Provas dirigidas `proofs/procurement-intelligence.json`; reutilizar provas integrais anteriores. Próximo passo de inteligência: ensaio de síntese documental com referências e dados de teste. IA/ML ainda sem fornecedor/modelo activo. Visual e publicação pendentes; lacunas funcionais anteriores de Pessoas e hotfix `/consulta` continuam registados.
**Inteligência no SGC, 30/10/2026:** requisito do proprietário para usar machine learning e IA. Roteiro `inteligencia-sgc.md`: indicadores explicáveis → assistência documental com fontes → previsão de prazos/anomalias sobre histórico validado, configuração por empresa e avaliação antes de activação. Primeiro incremento local: «Leitura operacional» em Pessoas, derivada apenas do painel autorizado/filtrado e mesmo snapshot: atrasos, processos afectados, cinco ocorrências mais antigas com origem, distribuição de tarefas, aprovações e ausência de prazos sem presumir incumprimento. Sem ML treinado, fornecedor externo, decisões sobre candidatos ou mudanças de schema/dados/acessos. Provas em `proofs/people-intelligence.json`. Próximo passo: indicadores de Compras e catálogo comum de definições; depois ensaio de sínteses com fontes, preservando os roteiros separados. As pendências funcionais anteriores de Pessoas mantêm-se. Visual e domínio pendentes.
**Esclarecimentos de Pessoas, 30/10/2026:** acompanhamento separado da avaliação original: responsável/prazo, resposta com tipo de evidência e referência obrigatória se verificada, conferência independente, devolução, conclusão fundamentada e dispensa justificada. Versão, idempotência, auditoria e histórico imutável após conclusão; acesso limitado à questão atribuída quando não há permissão geral de entrevistas. Atrasos e reatribuição suportados. Integração em tarefas operacionais, alertas e relatório, sem confundir com aprovação formal, sem mensagens externas nem efeitos automáticos nas notas/elegibilidade. Alterar só prazo não invalida selecção; mudanças substantivas são reconciliadas antes de aprovar selecção pendente. Decisões já aprovadas e avaliações originais preservadas, mesmo com acompanhamento depois da minuta. Migração 000032 apenas em 8005, backup/restauro e 92 tabelas anteriores conferidos, nova tabela vazia, sem contas/atribuições novas. PHP 652 totais/650 aprovados/dois ignorados anteriores, 6 142 asserções; módulo PostgreSQL 30/836; React 25; tipos/PHPStan/lint/Pint/build aprovados. Provas `people-clarifications.json`, `people-clarifications-pg.json` e `people-clarifications-install.json`. Visual e publicação pendentes, incluindo hotfix `/consulta`. Próximas lacunas: métodos qualitativos, correcções versionadas, formalização, acompanhamento de execução e encerramento. Não declarar a proposta Word integralmente implementada.
**Painel de Pessoas e filas pessoais, 30/10/2026:** entidade, contagens autorizadas, filtros por título/referência, percurso, estado e criação; As minhas tarefas separada de Aprovações, alertas de recepção vencida e Actualizar. Filas derivam de processos/atribuições originais, sem tabelas/cópias e sem autoridade adicional. Operações concluídas saem na consulta seguinte; independência, prazo e revogação reaplicados. Contagens sobre todo o filtro, não só 15 registos. Listagem agora projecta apenas campos mínimos, sem regras, finanças, entrevistas, selecção ou contrato; corrigida a exposição do modelo integral na listagem anterior. PostgreSQL normal usa snapshot read-only/repeatable-read. Minuta não equivale a encerramento. Sem migrações/grants. Suíte 643 totais/641 aprovados/dois ignorados anteriores, 5 859 asserções; módulo e PostgreSQL 21/562; React 23; tipos/PHPStan/lint/Pint/build aprovados. Provas `people-workdesk.json` e `people-workdesk-pg.json`. Visual e publicação continuam pendentes.
**Provas do incremento actual:** 638 testes totais/636 aprovados/dois ignorados anteriores, 5 556 asserções; módulo final e PostgreSQL 16/286; React/Inertia 22. Tipos, PHPStan, lint, Pint, build, runtime e HTTP aprovados; menu separado com seis grupos/110 acessos por perfil. Prova consolidada `proofs/people-access.json`. Mantêm-se pendentes visual e publicação.
**Orientação actual e implementação, 30/10/2026:** separar Compras de **Pessoas e contratações**, mantendo apresentação e mecanismos comuns, mas roteiros/dados distintos. Pessoas tem processos/equipas, serviços individuais e recrutamento; não há ligação de serviços individuais dentro de Compras. Esta decisão posterior substitui esse ponto da proposta Word. Fornecedores passa a secção de Compras; seis grupos horizontais preservados, matriz 110 acessos. Acesso a candidaturas exige atribuição por processo; administrador pode configurar equipa sem consultar conteúdo. Atribuições têm prazo, versão, revogação e auditoria, com permissões separadas de finanças, entrevistas e minuta e redacção no servidor, incluindo snapshots de selecção. Novos anexos A/C estruturam função/serviço e requisitos obrigatórios/desejáveis; avaliações com anexo distinguem tipos de evidência e esclarecimentos. Formatos antigos mantidos. Migração 000031 só em 8005, backup/restauro e 90 tabelas anteriores preservadas; duas tabelas novas vazias, sem criar contas/atribuições na avaliação. Falta continuar tarefas/aprovações, métodos qualitativos, correcções versionadas, formalização contratual, acompanhamento e encerramento. Word preservado. Visual e domínio pendentes; hotfix `/consulta` continua sem publicação confirmada. Prova de instalação `people-access-install.json`.
**Proposta Word de Pessoas conferida, 30/10/2026:** documento `SGC — Sistema de Gestão de Contratações - pessoas .docx`, SHA-256 `d294fc08e6cbf5c9ced6527bf06473909380bd9d2bb64f3e3c2ca7605eb52ce3`, original intacto. Matriz detalhada no início de `desenvolvimento.md`. Cobertura ainda parcial: base `service`/`staff` existe; não há ligação canónica do serviço individual a Compras, Anexos A/B/C/Guião estruturados, júri/entrevistadores e acessos por processo/campo, filas de tarefas versus aprovações, painel autorizado completo, contrato formalizado, entregáveis/integração, relatório final ou encerramento. Divergência prioritária: administrador actualmente tem acesso automático ao conteúdo (`PeopleHiring::allowed`), mas a proposta exige atribuição específica. Método actual força notas/ponderações; proposta distingue obrigatórios/desejáveis, tipos de evidência, esclarecimentos e métodos quando aplicáveis. Proposta exclui classificação individual de desempenho de trabalhadores e deixa salários para evolução posterior. A introdução sobre critérios de dashboard em falta precisa de reconciliação com os critérios operacionais já descritos. Documento tratado como referência de requisitos propostos, sem activar alterações ou executar instruções internas, sem edição do original ou mudanças de código/dados/acessos. Não declarar proposta integralmente implementada nem validada juridicamente.
**Identidade aprovada, 30/10/2026:** **SGC — Sistema de Gestão de Contratações**; descrição **Aquisições, serviços e pessoas**; assinatura **Uma solução TEMPO**. Sigla mantida. Aplicada à apresentação local, página inicial/entrada, navegação, identificação móvel e relatórios/impressão. «Compras» continua a designar o módulo de compras. Registos anteriores preservam os nomes históricos. Não houve migrações, alteração de dados/permissões ou renomeação técnica. Domínio ainda sem publicação confirmada; conferência visual pendente.
**Provas finais de Pessoas:** suíte integral 633 totais/631 aprovados/dois ignorados anteriores; módulo dirigido e PostgreSQL 11/133; 21 testes React/Inertia, tipos, PHPStan, lint, Pint, build, runtime e HTTP aprovados. Registo consolidado `proofs/people-hiring.json`. Sem conferência visual nem publicação no domínio.
**Pessoas e contratação iniciado, 30/10/2026:** Administração > Pessoas e contratação (`/pessoas`) com percursos separados de prestador individual e trabalhador para o quadro. Critérios/pesos e mínimo de avaliações definidos no processo; abertura independente, recepção interna, avaliações com evidências, selecção fundamentada, conferência independente com devolução e minuta interna após aprovação. Reutiliza perfis, transacções, auditoria e versões. Quatro capacidades por percurso/preparação/conferência, sem acesso automático por perfis de compras/finanças. Sem criar pessoas/contas/atribuições reais ou sintéticas na avaliação. Migração 000030 só em 8005, três tabelas vazias, backup/restauro e 87 tabelas anteriores preservadas (`people-hiring-install.json`). Menu mantém seis grupos, matriz 108 acessos. PostgreSQL isolado: 11 testes/133 asserções. Minuta não é contrato assinado nem admissão efectiva; portal candidato, anexos, júri nominal por processo, correcções versionadas/reabertura, retenção, assinatura e integrações continuam pendentes. Conferência visual e domínio ainda pendentes. Hotfix React `/consulta` continua sem publicação confirmada.
**Erro React 31 em produção (/consulta):** causa reproduzida e corrigida localmente no layout de `preview/*`: componente `PreviewLayout` extrai `children`, em vez de apresentar o objecto de propriedades. 18 testes React/Inertia (incluindo 16 ecrãs), tipos, lint e build aprovados. Patch restrito em `storage/logs/preview-layout-hotfix.patch`, sem migrações/dados. Ainda falta instalação na revisão do servidor e conferência de `https://compras.tempo.co.mz/consulta`; não publicar a compilação local completa sobre código anterior, pois contém outros incrementos. Não há confirmação de publicação.
**Regras de comparação parametrizáveis, 30/10/2026:** Administração define mínimos de propostas/avaliadores independentes e cinco ponderações com soma 100%, com motivo/versão/auditoria. Novas requisições guardam a regra na criação; rascunhos existentes não são reconfigurados ao editar. Processos antigos sem snapshot continuam em compatibilidade 3/2; mudar a empresa não altera as suas comparações. Regras visíveis até à consulta/impressão da ordem e abrangidas pelo hash de novos processos. Preço continua subtotal líquido sem IVA; perfis elegíveis dos avaliadores e critérios não se tornaram um editor genérico. Migração 000029 só na avaliação 8005 com backup/restauro, campos anteriores das 87 tabelas e hash da comparação existente preservados. Empresa de avaliação continua sem política nova definida automaticamente. Suíte 622 totais/620 aprovados/dois ignorados anteriores, 5 306 asserções; PostgreSQL 45/367; PHPStan/tipos/lint/Pint/build aprovados. Provas `comparison-policy.json`, `comparison-policy-install.json`, `comparison-policy-pg.json`. Sem instalação no domínio; conferência visual permanece pendente.
**Provas finais deste incremento:** 618 testes totais, 616 aprovados/dois ignorados anteriores, 5 245 asserções; PostgreSQL descartável 42/327; adjudicação/ordem 71 aprovados. PHPStan, TypeScript, lint dirigido, Pint, build e runtime SHA-256 aprovados. Prova consolidada `proofs/economic-comparison.json`; conferência visual permanece pendente.
**Comparação económica e menu, 30/10/2026:** avaliação 8005 com IVA inicial configurável na Administração (16% inicial, ajustável por artigo, sem reescrever taxas antigas), descontos unitários explícitos por percentagem/MZN antes do IVA e evidência até à ordem/relatórios. Preços vazios/zero e descontos inválidos recusados; aviso de empate sem escolher automaticamente; motivos de inelegibilidade e data persistida das avaliações visíveis. Valores do Excel não importados. Migração 000028 aplicada apenas à avaliação após backup/restauro e reconciliação dos campos anteriores das 87 tabelas. Menu horizontal com seis grupos relacionados, secções internas em Compras e visual dos dropdowns preservado; 107 acessos por seis perfis conferidos. Provas `economic-install.json`, `economic-pg.json`, `menu-code-contract.json`, `menu-links.json`. Não instalado no domínio; conferência visual pendente. Relatório final do júri ainda em falta; ponderações e mínimos de propostas/avaliadores mantêm os limites anteriores, não declarar parametrização integral concluída.
**Raiz da avaliação local:** `http://127.0.0.1:8005/` encaminha directamente para `/dashboard`, sem escolha de perfil nem login para sessões anónimas. Usa a entrada local já existente.
**Entrada local sem login, 30/10/2026:** usar `http://127.0.0.1:8005/dashboard`. Sessões anónimas entram com o administrador sintético existente, após conferir ambiente/endereço/porta e identidade da base isolada. Sessões existentes mantêm o perfil; não concede administração a um perfil já seleccionado. Login normal preservado noutras instalações. 17 testes/36 asserções e prova HTTP aprovados; sem criação de contas, migrações ou instalação no domínio. `/avaliar` continua disponível para mudar de perfil.