44 KiB
Validação técnica do SGC — 28 de Outubro de 2026
Incremento: recomendação formal antes da adjudicação
O âmbito de docs/proposta-recomendacao.md foi validado pelo utilizador e
implementado. A Administração configura uma política própria de recomendação
em /politica-recomendacao, com perfis Finanças e/ou chefia do departamento,
quantidade de pessoas distintas, activação e fundamento expressos. Não há
perfis ou quantidade inicialmente seleccionados. O máximo de 50 confirmações
é um limite técnico e não define um quórum empresarial.
Compras adopta a versão activa em /requisicoes/{requisition}/recomendacao,
num pedido aprovado que já adoptou o regime de admissão, antes de adjudicar.
Sem essa adopção, mantém-se o circuito existente. Uma versão geral nova ou
desactivada não reescreve processos; a desactivação impede novas adopções.
Trocar a versão aplicável exige adopção expressa e novas tentativas e
conferências. Uma política de admissão não autoriza, por si, a recomendação.
A recomendação exige matriz pronta, admissões confirmadas na base actual, três fornecedores distintos elegíveis e duas avaliações por proposta, sem alteração do cálculo ponderado existente. Compras, diferente do solicitante, escolhe expressamente entre as maiores pontuações e fundamenta, incluindo em empate. Não há desempate automático, dispensa do mínimo, escolha abaixo da maior pontuação ou autorização para corrigir preços.
Cada tentativa preserva matriz, propostas/linhas, avaliações, referências e bases das admissões/requisitos/análises, conferências, política e proponente. Os dados de contacto ou documentos privados dos fornecedores não entram na matriz preservada. Uma nova tentativa é imutável e não herda confirmações. Uma devolução encerra a tentativa sem excluir o concorrente ou cancelar o processo. Conferências repetidas idênticas são idempotentes e contam uma vez. Identidades, empresa, perfil, departamento, segregação e conflitos são revalidados dentro da transacção, após o bloqueio da empresa. As confirmações anteriores são revalidadas até concluir o quórum; a história concluída conserva a elegibilidade verificada na sua data, sem autorizar futuras operações com perfil revogado. Uma pessoa não conta duas vezes após mudar de perfil.
Nos processos com adopção, a adjudicação só selecciona a mesma proposta de uma recomendação confirmada na base actual. A referência e a base ficam preservadas na adjudicação e na ordem; são revalidadas antes de aprovar/emitir. Uma alteração de avaliação ou uma nova admissão pode invalidar a recomendação mesmo mantendo preços e pontuações. Não se reescrevem adjudicações/ordens anteriores. Existindo adjudicação, a adopção e as tentativas/conferências ficam fechadas; alterações exigem o circuito de revisão já suportado, quando autorizado. A repetição de uma emissão concluída devolve a mesma ordem. Recomendar não movimenta orçamento nem substitui as aprovações do valor final, regras de investimento, conflitos, facturas ou pagamentos.
As páginas usam o cabeçalho, rodapé, menus e identificação Sistema de Gestão
de Compras (SGC). Comparação, adjudicação e processo completo ligam ao novo
circuito; o processo apresenta os eventos de auditoria. O relatório de
conferência assinala a adopção e remete para o relatório preservado da
recomendação. A impressão autenticada em /recomendacoes/{attempt}/imprimir
mostra matriz/base originais, candidata, fundamentos, conferências, devoluções
e tentativas anteriores da mesma adopção, distinguindo dados históricos da
situação actual. As restantes adopções são consultáveis na página do processo.
O conteúdo é escapado e a resposta é private, no-store. Em PostgreSQL, a
impressão usa REPEATABLE READ, READ ONLY, relendo o operador; não cria
auditoria nem outros registos. Não é uma assinatura digital ou certificação
das evidências. A revisão visual da paginação continua pendente.
Resultado da bateria completa: 498 testes aprovados, 2 ignorados, 4141 asserções. Inclui 17 cenários de recomendação, com percurso genuíno até adjudicação/emissão, empate e escolha da proposta empatada, escolha abaixo da maior pontuação, matriz incompleta, admissão pendente/nova, mudanças de base, devolução, repetição, perfis/departamentos revogados, mesma identidade em perfis diferentes, política preservada, circuito sem adopção, segregação, isolamento, relatório histórico sem escrita, escape de conteúdo e rollback de auditoria de tentativa/conferência.
Passaram 8 cenários PostgreSQL, com processos PHP e ligações independentes
e dois bloqueios simultâneos observados em cada cenário: mesma pessoa,
pessoas distintas, respostas opostas, perfil revogado, avaliação alterada,
nova adopção durante a espera, tentativas concorrentes e nova recomendação
versus adjudicação. Conferiram-se quórum, versões, auditoria e vínculo à
tentativa; a base de teste foi eliminada. O resultado está em
docs/recomendacao-concorrencia-postgresql.json. Não se afirma que foram
observadas todas as ordens possíveis de escalonamento ou testada corrida de
impressão/emissão nesta bateria.
Migração 000020, lote 21, aplicada em compras_dev após backup privado
de 326150 bytes, verificado por restauro numa base separada e eliminada
depois da conferência. As 61 tabelas anteriores, os registos de negócio
por projecção das colunas originais, restrições existentes, histórico de
migrações e .env foram preservados. São quatro tabelas novas e um campo
JSON anulável na adjudicação. As quatro tabelas reais de recomendação estão
vazias; não houve publicação de políticas, seeds ou compras reais. O relatório
sanitizado está em docs/recomendacao-migracao-000020.json; backup e manifesto
continuam privados e fora do Git. O rollback destrutivo automático é impedido.
Pint, PHPStan, TypeScript, build e lint/formatação do âmbito passaram. A
formatação global de docs/compatibilidade.md, alteração local alheia, continua
pendente e fora do commit, juntamente com as alterações de desenvolvimento e
continuidade preservadas. O navegador voltou a devolver The browser access host is unavailable: permanecem pendentes revisão visual pública, autenticada,
de impressão e interacções no navegador. Validação operacional integral das
empresas, novas modalidades/métodos de avaliação, dispensas, comunicação
externa, cancelamento de ordens emitidas, estornos/devoluções e agregação por
projecto/fraccionamento não são declarados concluídos por esta entrega.
Preparação: proposta de recomendação formal
Após d020be5, foi preparada /proposta/recomendacao, ligada ao menu
Compras apenas na consulta demonstrativa. Usa a navegação, cabeçalho e
rodapé partilhados do Sistema de Gestão de Compras (SGC), com dados fictícios
locais. Permite experimentar configuração de perfis/quantidade sem valores
iniciais, adopção explícita, matriz pronta/impedida, empate, escolha manual,
fundamento, conferências, devolução e histórico. A alteração de base ou de
política adoptada torna a tentativa anterior histórica. A impressão é
identificada como simulação. Não há persistência no navegador ou no servidor.
O circuito real proposto está em docs/proposta-recomendacao.md. A sua
implementação aguarda validação: política própria por empresa, adopção
opcional após regime de admissão, conferência independente e vínculo da
adjudicação à recomendação confirmada na mesma base. Não se publicaram
políticas, acrescentaram migrações ou alteraram regras de adjudicação,
orçamento, facturação ou pagamento. Os exemplos históricos não fornecem
parâmetros obrigatórios às aderentes.
Passaram 18 testes de entrada e consulta pública, com 290 asserções,
incluindo as demonstrações de qualificação/admissão/recomendação, identidade
pública nula sem terminar a sessão existente e ausência de endpoint público
de escrita. PHPStan, Pint, TypeScript, build e lint/formatação do âmbito passaram.
Confirmado HTTP 200 com componente preview/recommendation, utilizador nulo,
apenas propriedades gerais da consulta pública e título inicial Sistema de
Gestão de Compras (SGC).
A bateria completa do negócio não foi repetida neste incremento de
interface; os resultados de 478 aprovados e 2 ignorados abaixo pertencem à
entrega anterior de admissão. As alterações locais dos três documentos de
continuidade foram preservadas; a formatação global de docs/compatibilidade.md
continua fora do âmbito desta entrega.
O controlo do navegador voltou a devolver The browser access host is unavailable. A revisão visual e de interacção, incluindo impressão, continua
pendente e não é substituída pelos testes automatizados.
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
/requisicoes/{requisition}/relatorio. O relatório reúne identificação do
pedido, matriz comparativa actual, última versão dos requisitos documentais,
último registo de cada analista por proposta e referências à acta,
adjudicação e ordem existentes. Não é uma recomendação formal nem uma nova
etapa obrigatória da compra.
As pontuações, ponderações e impedimentos são devolvidos pelo método de comparação existente, sem recalcular outro modelo ou classificar por menor preço. Uma matriz incompleta não apresenta maior pontuação como recomendação; empates da matriz pronta são identificados sem desempate automático. As propostas são apresentadas na ordem de registo. Valores de adjudicação e ordem preservados são mostrados separadamente dos preços actuais.
Os resultados documentais pertencem à base preservada na versão dos requisitos. Se essa base divergir da actual, o relatório assinala-o e mantém nomes, referências e análises da versão original. Respostas por analisar e propostas sem registos não são apresentadas como análise concluída. Não há consolidação por maioria, quórum presumido, dispensa automática de requisito, admissão/exclusão ou autorização financeira.
Em PostgreSQL, o relatório é construído numa transacção própria de leitura,
REPEATABLE READ, READ ONLY, sem criar auditoria ou outros registos de
negócio. O operador é relido antes de consultar dados, respeitando empresa,
departamento e perfis autorizados para propostas. Não são devolvidos dados
bancários, contactos, beneficiários ou documentação privada dos fornecedores.
A resposta usa private, no-store e histórico Inertia cifrado.
A impressão usa os dados já carregados no ecrã, sem nova consulta ao servidor ao imprimir. Apresenta instante da consulta, fuso Africa/Johannesburg (UTC+2), utilizador e identificação do processo. Actualizar a página é uma consulta nova. O relatório não fica guardado como versão assinada, decisão ou prova de validação de evidências. A impressão está preparada em A4 horizontal, com cabeçalhos de tabela repetíveis, mas a revisão visual continua pendente.
Resultado: 461 testes aprovados, 2 ignorados, 3698 asserções. Sete testes novos verificam ausência de decisões inventadas e de escritas, dados antigos separados dos actuais, registos independentes por analista, restrições de perfil/empresa/departamento, revalidação do operador, minimização de dados e empates/valores preservados de ordens efectivamente emitidas pelo circuito. PHPStan, Pint, TypeScript, build e lint dos ficheiros alterados passaram.
Três verificações PostgreSQL passaram numa base temporária exclusiva:
consistência da consulta enquanto outra ligação corrige análise, altera
proposta e cria requisitos novos; perfil revogado depois de carregar o
operador; departamento alterado antes de iniciar a leitura. Foi observada a
espera concorrente por bloqueio consultivo. O primeiro cenário verificou
explicitamente repeatable read e read_only=on e devolveu apenas o estado
original, sem misturar versões posteriores. Não foram criados eventos de
negócio pelo leitor e a base temporária foi eliminada. Ver
relatorio-concorrencia-postgresql.json.
Não houve migração nem escrita na base de negócio. As alterações locais de
compatibilidade.md, desenvolvimento.md e orientacoes-continuidade.md
foram preservadas e excluídas desta entrega. A formatação global desse
primeiro documento permanece fora do âmbito. Revisão visual, decisão formal
de admissão/exclusão, recomendação formal e cancelamento de ordens emitidas
continuam pendentes nos respectivos âmbitos.
O navegador voltou a devolver The browser access host is unavailable nesta
verificação. Testes HTTP, compilação e a opção de imprimir não substituem a
revisão visual pública, autenticada e de impressão.
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
/requisicoes/{requisition}/abertura. Compras pode registar uma sessão num
pedido aprovado, antes de existir adjudicação. O registo é opcional; não
introduz um concurso público obrigatório, um número mínimo de propostas,
um júri obrigatório ou um novo circuito financeiro em todas as empresas.
O operador declara referência, local, data/hora, fuso horário, intervenientes, qualidade em que participam, observações e referências de anexos, selecciona as propostas e confirma a conferência. As propostas seleccionadas são copiadas no servidor com fornecedor, referência, valores e linhas; não se aceitam valores de uma acta enviados pelo cliente. Uma impressão autenticada usa a cópia preservada, incluindo nome da empresa e autor do registo. Não contém pontuações ou uma recomendação de adjudicação.
As datas são interpretadas no fuso declarado, guardadas em UTC e apresentadas nesse fuso. Este primeiro âmbito suporta Africa/Johannesburg, Africa/Maputo e UTC; a interface começa pelo fuso do contexto local. Sessões futuras e prazo de apresentação posterior à sessão são recusados. O prazo é declarado; não se presume que a data de criação de uma cotação no SGC seja a sua data real de entrega pelo concorrente.
Correcções criam versões novas, com fundamento e referência à versão anterior na auditoria. As versões guardadas não são editadas ou eliminadas pela aplicação. Uma base de propostas alterada desde a consulta ou uma versão anterior desactualizada é recusada. A interface permite conferir a base actualizada sem apagar os textos introduzidos. Propostas posteriormente adicionadas ou alteradas não entram nas actas anteriores; uma divergência é assinalada na consulta. Não se alterou a política de recepção de cotações.
Os nomes dos intervenientes são declarações, não assinaturas digitais verificadas. A impressão disponibiliza espaço para assinaturas manuscritas. As referências de anexos não representam carregamento ou validação de ficheiros. Registar uma acta não avalia propostas, não certifica a realização da sessão, não adjudica, não reserva orçamento e não autoriza compras. Alterações documentais depois da adjudicação exigem um circuito futuro; este incremento conserva as actas anteriores para consulta, sem as reescrever.
Administração, Compras, Finanças e chefias autorizadas consultam; apenas
Compras regista. Mantêm-se isolamento entre empresas, âmbito departamental,
verificação de conflitos e revalidação do operador dentro da transacção.
Solicitantes e Armazém não ganham acesso a preços ou actas. Consulta e
impressão usam private, no-store; o histórico Inertia é cifrado. Os registos
aparecem nos documentos e eventos da visão única conforme o perfil.
A migração aditiva 000017 foi aplicada no batch 18 após backup privado de
291397 bytes e restauro verificado de 54 tabelas. Dados anteriores,
restrições e .env foram preservados; não foram criadas actas fictícias na
base de negócio. Ver abertura-migracao-000017.json. Backup e manifesto
ficam fora do Git.
Resultado: 443 testes aprovados, 2 ignorados, 3431 asserções, incluindo
11 testes novos de snapshots, versões, base desactualizada, impressão,
fuso horário, validação, segregação, empresas/departamentos, revogação de
perfil, rollback de auditoria, imutabilidade e escape de texto. Quatro
cenários PostgreSQL passaram, cada um com duas ligações e duas esperas de
bloqueio simultâneas: versões iniciais concorrentes, correcções concorrentes,
perfil revogado e base alterada durante a espera. A base temporária exclusiva
foi eliminada. Ver abertura-concorrencia-postgresql.json.
PHPStan, Pint, TypeScript e build passaram. A revisão visual da interface e da impressão permanece pendente pela indisponibilidade do navegador. Não se declara validação operacional de concursos, assinaturas, orçamentos ou regras de cancelamento de ordens emitidas. Publicação de concursos, propostas seladas, qualificação por etapas e novos métodos de avaliação continuam pendentes; os exemplos locais não os tornam obrigações universais.
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
/requisicoes/{requisition}/processo. A página reúne as etapas já suportadas,
os responsáveis por função, decisões com autores e datas, atalhos para os
registos e o histórico permitido ao perfil. Inclui ligação entre processos
originais e revisões quando ambos são visíveis ao utilizador. O cabeçalho e
rodapé partilhados mantêm-se neste ecrã.
Esta é uma consulta dos registos existentes. Não cria etapas obrigatórias, aprovações, documentos, reservas ou pagamentos. Planeamento, acta de abertura, qualificação específica do concurso e relatório por etapas aparecem apenas como funcionalidades futuras, sem se presumirem aplicáveis a todas as compras. Os quatro exemplos locais continuam a ser referências, não regras impostas.
O estado da requisição é separado dos restantes estados. Existência de propostas não significa elegibilidade; histórico técnico não garante validade da base actual; existência de lançamentos não certifica o orçamento; recepções podem ser parciais; registo de factura não equivale a validação; pagamentos externos confirmados não comprovam liquidação integral nem executam transferências.
A rota exige autenticação, empresa configurada e visibilidade da requisição.
Solicitantes não obtêm detalhes de propostas, adjudicações, ordens ou finanças
por esta consulta. Chefias conservam o âmbito departamental; Finanças e
Administração consultam os resumos financeiros. O Armazém não obtém acesso a
requisições de terceiros por esta nova rota. Documentos e eventos são filtrados
no servidor, sem snapshots privados, anexos ou dados bancários. A resposta usa
private, no-store e histórico Inertia cifrado.
Cinco testes específicos cobrem registos e estados parciais, ocultação de compras/finanças ao solicitante, propriedade e departamento, isolamento entre empresas e convidados, actualização da validação de factura e leitura sem novos eventos de auditoria. Não há migração nem alteração de dados de negócio. TypeScript, lint/formatação, build, PHPStan e Pint passaram.
Bateria completa deste incremento: 419 testes aprovados, 2 ignorados, 3180 asserções. Os testes ignorados continuam condicionados à activação de MFA; não são apresentados como aprovados. Os seis cenários concorrentes do incremento anterior não foram repetidos, pois esta entrega não altera as operações transaccionais que verificam.
O navegador voltou a devolver The browser access host is unavailable.
A revisão visual pública, autenticada e de impressão continua pendente;
testes HTTP e compilação não a substituem. O cancelamento de ordens emitidas
continua sujeito à proposta de regras ainda não validada.
Incremento: navegação partilhada e revisão sem ordem emitida
O cabeçalho e rodapé do SGC são partilhados pelo acesso autenticado e pela
consulta pública, incluindo a proposta /proposta/principal. Os dropdowns
agrupam Compras, Finanças, Armazém e Gestão; preservam os acessos anteriores,
o menu da conta e a localização do ecrã. As opções autenticadas respeitam o
perfil; a autorização continua a ser verificada no servidor. A referência
visual foi consultada apenas em leitura no InvesteMoz: preto #090909,
vermelho #ed1c24, menus brancos. O projecto InvesteMoz não foi alterado.
Em /revisao-compras, cada empresa pode propor uma política datada para
cancelar adjudicações sem ordem emitida. Não existe activação por defeito.
A implementação usa duas assinaturas administrativas distintas do proponente
para publicar a regra e uma decisão Financeira independente para cada
cancelamento pedido por Compras. Estas são opções deste circuito implementado;
não constituem valores financeiros predefinidos para as empresas.
Um cancelamento pendente bloqueia novas decisões finais e emissão. Aprovação encerra a adjudicação e requisição originais, mantendo cotações e decisões; liberta apenas reserva não comprometida. Repetições idênticas não duplicam lançamentos. Rejeição mantém a compra original. Uma decisão é imutável e, neste primeiro âmbito, existe no máximo um pedido de cancelamento por adjudicação, incluindo pedidos rejeitados. Uma alteração da política bloqueia a aprovação de pedidos antigos; a rejeição continua disponível para retomar o processo. Ordens emitidas e compromissos financeiros impedem este circuito.
Só o solicitante original, ainda no mesmo departamento, pode preparar um único novo rascunho ligado ao cancelamento aprovado, com nova data e justificação. Copiam-se artigos e estimativas, sem decisões, cotações, validações técnicas ou reserva automática. O novo pedido segue o circuito normal, incluindo validação técnica quando aplicável. As restrições únicas de adjudicação e ordem por requisição foram conservadas.
A migração aditiva 000015 foi aplicada no batch 16 após backup privado de
259925 bytes e restauro verificado de 48 tabelas numa base temporária.
Dados de negócio anteriores, restrições e .env foram preservados; não foram
criadas políticas ou operações fictícias na base real. Ver relatório
revisao-migracao-000015.json. O backup e o manifesto ficam fora do Git.
Sete cenários novos verificam política obrigatória, bloqueio pendente,
rejeição e retoma, histórico e rascunho único, recusa após emissão,
segregação após mudança de perfil, libertação única da reserva e rollback
conjunto quando falha a auditoria. A validação concorrente deste circuito
foi acrescentada numa base PostgreSQL temporária: 6 cenários aprovados,
cada um com duas ligações independentes e duas esperas de bloqueio simultâneas.
Abrange decisão repetida, decisões opostas, revisão repetida, emissão com
cancelamento pendente, emissão repetida e emissão em disputa com um pedido
de cancelamento. Nos três cenários de emissão, a adjudicação é seleccionada
e aprovada pelos serviços reais da aplicação. O controlo positivo emite uma
única ordem e um único compromisso; na disputa, apenas uma operação avança.
Os quatro primeiros cenários verificam também reserva e revisão únicas.
O relatório é revisao-concorrencia-postgresql.json; a base exclusiva de
testes foi eliminada no fim. Não houve alterações à base de negócio.
Resultado do incremento: 414 testes aprovados, 2 ignorados, 3099 asserções. PHPStan e Pint passaram; TypeScript, lint/formatação e build passaram. As quatro verificações HTTP da proposta, requisições públicas, reforços e aparência responderam 200. Estes pedidos HTTP não constituem revisão visual.
A revisão visual pública, autenticada e de impressão continua pendente: o acesso ao navegador permanece indisponível. Compilação e testes não a substituem. Ordens emitidas, estornos, notas de crédito, devoluções e validação operacional das regras de cada empresa continuam fora deste âmbito.
Esta revisão cobre os módulos implementados e as pendências documentadas no repositório. Não equivale a validação operacional integral ou certificação de todos os requisitos do sistema. Valores e políticas reais continuam a pertencer a cada empresa; nenhum foi criado nesta revisão.
Correcções verificadas
- Operações que verificavam o perfil antes de esperar pelo bloqueio da empresa passam a recarregar e bloquear o utilizador dentro da transacção. Abrange facturas, dados bancários, stock, recepções, requisições, adjudicação, emissão, validação técnica e dotação inicial. Mudança de perfil ou de empresa durante a espera não é autorizada pelo perfil antigo em memória.
- Requisição volta a verificar departamento e centro de custo ao guardar e o departamento do solicitante ao submeter. Decisões departamentais usam o perfil actual; revisão técnica e aprovadores finais são bloqueados durante as verificações transaccionais.
- Dotação pendente mostra zero disponível e zero aprovado, preservando o valor proposto e o histórico. O servidor já bloqueava a reserva; a interface deixou de apresentar verba proposta como disponível.
- Teste da página de segurança com MFA desligado deixou de ser indevidamente ignorado. Textos dessa página e confirmação de alteração de palavra-passe traduzidos para português. Nenhuma palavra-passe real foi alterada.
- Configuração de fontes passou a declarar desactivada a optimização opcional
que já não era gerada por ausência de
fontaine. Mantém Instrument Sans e elimina o aviso de dependência opcional sem instalar pacotes novos.
Resultados
407 testes aprovados, 2 ignorados, 2.964 asserções na suite completa SQLite em memória. Os dois ignorados dependem de MFA activado, actualmente desligado; não são apresentados como funcionalidades validadas. PHPStan, Pint, TypeScript, compilação e formatação/lint frontend verificados no fecho.
32 cenários concorrentes PostgreSQL aprovados, todos em bases exclusivas de teste, eliminadas no final:
| Área | Cenários | Evidência |
|---|---|---|
| Recepções | 4 | Relatório |
| Stock e peças | 7 | Relatório |
| Reservas e compromissos | 5 | Relatório |
| Facturas e consumo | 3 | Relatório |
| Dados bancários | 3 | Relatório |
| Pagamentos externos | 3 | Relatório |
| Reforços | 3 | Relatório |
| Regras de investimento | 3 | Relatório |
| Perfil revogado durante espera | 1 | Relatório |
O último ensaio bloqueia a empresa, observa duas ligações simultaneamente à espera e revoga os dois perfis de Armazém antes de libertar o bloqueio. Os dois pedidos pelo kernel HTTP retornam 403; não criam recepções nem movimentos. Os restantes ensaios verificam saldos, duplicações e integridade conforme os respectivos relatórios. Não são testes de carga ou uma validação de todos os possíveis cruzamentos concorrentes do sistema.
Sem migrações, seeds, criação de contas, alteração de configuração de ambiente ou escritas de negócio na base real nesta revisão. Acesso HTTP pode actualizar sessões. Nenhuma autorização de compra ou transferência bancária foi emitida.
O que permanece por tratar
| Pendência | Situação |
|---|---|
| Revisão visual pública, autenticada e impressão | Bloqueada pelo acesso ao navegador; testes HTTP não a substituem. |
| MFA obrigatório e ciclo completo de acessos | Não implementados/activados; dois testes condicionais continuam ignorados. |
| Revisão/cancelamento de adjudicações e ordens | Cancelamento de adjudicações sem ordem implementado no incremento abaixo; cancelamento de ordens emitidas continua ausente. |
| Reversões, estornos, notas de crédito e devoluções | Funcionalidades ainda não implementadas; não se apagam lançamentos existentes. |
| Regras empresariais | Escalões provisórios, regras fiscais, validade/levantamento de conflitos e excepções exigem decisão da empresa. |
| Investimento agregado e fraccionamento | Apenas tecto por processo suportado; sem agregação/detecção automática. |
| Outras etapas do roteiro | Multimoeda, reposição, tolerâncias/investigação de inventários, manutenção/activos e requisitos de subscrição/hosting continuam no roteiro. |
| Controlos operacionais | Carga, permissões contra SQL administrativo, retenção e recuperação por empresa ainda exigem validação própria. |
Estas pendências não foram marcadas como concluídas por compilação ou testes funcionais. O próximo incremento de revisão/cancelamento deve definir e guardar uma política explícita por empresa, conservar o passado e exigir novas decisões para processos revistos; não pode autorizar por omissão a alteração de ordens emitidas ou a libertação de compromissos já consumidos.
Verificação HTTP local no fecho: 18 páginas públicas responderam 200 e
13 rotas protegidas responderam 302 sem sessão. O navegador voltou a devolver
The browser access host is unavailable; a revisão visual continua pendente.