Valida concorrencia e aplica orcamento com recuperacao verificada
This commit is contained in:
+26
-15
@@ -2,26 +2,37 @@
|
||||
|
||||
Estado actualizado em 28 de Outubro de 2026. Projecto activo: C:\laragon\www\compras, Laravel + React + PostgreSQL, http://127.0.0.1:8015. Preservar conta, dados, configuração, cookie e porta. SGF Tempo e Investmoz são independentes. A implementação Python separada fica apenas como referência; não importar contas, sessões ou bases experimentais.
|
||||
|
||||
| Área | Implementado no Laravel | Pendente |
|
||||
| -------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
|
||||
| Acesso e organização | Fortify, conta, empresa, equipa, departamentos e centros de custo | MFA obrigatório e ciclo completo de acessos |
|
||||
| Requisições e aprovações | Rascunhos, cálculos exactos, etapas, segregação e snapshots | Validação empresarial das regras provisórias |
|
||||
| Fornecedores | Cadastro, edição, renovação, validação independente e anexos privados | Dados bancários com dupla validação |
|
||||
| Cotações | Propostas, avaliações e matriz comparativa | Multimoeda e revisão das propostas |
|
||||
| RF-AF-01 | Declarações pessoais, histórico e ConflictGuard no servidor | Política de periodicidade, validade e levantamento |
|
||||
| Adjudicação | Escolha fundamentada, revalidação e aprovação do valor final | Excepções, revisão e cancelamento sem política ficam bloqueados |
|
||||
| Ordens | Emissão única/idempotente, snapshots, consulta e impressão | Orçamento não validado; documentos de desenvolvimento |
|
||||
| Recepção | Parcial/total, qualidade, divergências, pendentes, segregação do emitente e auditoria | Substituições e anexos; rejeições não autorizam receber acima do total |
|
||||
| Stock | Artigos, armazéns, entradas, saídas fundamentadas, transferências atómicas, contagens e ajustes auditados por empresa | Revisão visual, reposição e conversões |
|
||||
| Equipamentos e peças | Cadastro, compatibilidade, mínimos, alertas, validação técnica e rastreabilidade | Regra de investimento; adjudicação/emissão de equipamento bloqueadas |
|
||||
| Orçamento, facturas e pagamentos | Ainda não implementados | Definir regras antes do próximo incremento |
|
||||
| Início e navegação | Página inicial própria, menus por área/perfil e consulta pública por módulo | Revisão visual |
|
||||
| Auditoria | Histórico das operações implementadas | Exportações, retenção e protecção contra SQL administrativo |
|
||||
| Área | Implementado no Laravel | Pendente |
|
||||
| ------------------------ | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
|
||||
| Acesso e organização | Fortify, conta, empresa, equipa, departamentos e centros de custo | MFA obrigatório e ciclo completo de acessos |
|
||||
| Requisições e aprovações | Rascunhos, cálculos exactos, etapas, segregação e snapshots | Validação empresarial das regras provisórias |
|
||||
| Fornecedores | Cadastro, edição, renovação, validação independente e anexos privados | Dados bancários com dupla validação |
|
||||
| Cotações | Propostas, avaliações e matriz comparativa | Multimoeda e revisão das propostas |
|
||||
| RF-AF-01 | Declarações pessoais, histórico e ConflictGuard no servidor | Política de periodicidade, validade e levantamento |
|
||||
| Adjudicação | Escolha fundamentada, revalidação e aprovação do valor final | Excepções, revisão e cancelamento sem política ficam bloqueados |
|
||||
| Ordens | Emissão única/idempotente, snapshots, consulta e impressão | Orçamento não validado; documentos de desenvolvimento |
|
||||
| Recepção | Parcial/total, qualidade, divergências, pendentes, segregação do emitente e auditoria | Substituições e anexos; rejeições não autorizam receber acima do total |
|
||||
| Stock | Artigos, armazéns, entradas, saídas fundamentadas, transferências atómicas, contagens e ajustes auditados por empresa | Revisão visual, reposição e conversões |
|
||||
| Equipamentos e peças | Cadastro, compatibilidade, mínimos, alertas, validação técnica e rastreabilidade | Regra de investimento; adjudicação/emissão de equipamento bloqueadas |
|
||||
| Orçamento | Dotação por empresa/centro/exercício, aprovação independente, reservas e compromissos | Revisão visual, reforços e validação operacional integral |
|
||||
| Facturas e pagamentos | Ainda não implementados | Conferência, consumo e liquidação |
|
||||
| Início e navegação | Página inicial própria, menus por área/perfil e consulta pública por módulo | Revisão visual |
|
||||
| Auditoria | Histórico das operações implementadas | Exportações, retenção e protecção contra SQL administrativo |
|
||||
|
||||
Preservar enums, políticas, modelos relacionais, Brick Math e isolamento por empresa. As regras guardadas nos snapshots não são substituídas pela configuração actual. Ausência de conflito não anula conflito registado. Exemplos públicos fictícios não dão acesso aos dados de negócio.
|
||||
|
||||
## Verificação actual
|
||||
|
||||
Actualização de orçamento: cadastro e aprovação independente de dotações por
|
||||
empresa/centro/exercício, com base de IVA explícita, reservas, libertações e
|
||||
compromissos implementados. Migração 000009 aplicada no lote 10 após backup e
|
||||
restauro verificados de 37 tabelas. Cinco cenários concorrentes PostgreSQL
|
||||
aprovados; 14 testes de orçamento passaram com 40 asserções. Não foram criadas
|
||||
dotações na base real. Facturas, reforços, pagamentos e validação operacional
|
||||
integral continuam pendentes. Ver [relatório actual](desenvolvimento.md).
|
||||
|
||||
### Referência anterior à aplicação do orçamento
|
||||
|
||||
Referência consolidada: `75ffdb3`, com **262 testes aprovados, 3 ignorados e
|
||||
2.327 asserções**. Nova verificação dirigida de equipamentos, adjudicação,
|
||||
ordens e navegação: **87 testes aprovados, 1.163 asserções**. As onze migrações,
|
||||
|
||||
@@ -1,5 +1,49 @@
|
||||
# Desenvolvimento do SGC
|
||||
|
||||
## Aplicação e validação PostgreSQL do orçamento
|
||||
|
||||
- Migração 000009 aplicada à base actual no **lote 10**, sem migrações pendentes.
|
||||
Backup custom PostgreSQL 17 de 206.615 bytes em armazenamento privado;
|
||||
manifesto privado com hashes e instruções de recuperação. O dump e o manifesto
|
||||
partilharam um snapshot consistente. Restauro verificado em base temporária:
|
||||
**37 tabelas** coincidiram em contagens e hashes. Base de restauro eliminada.
|
||||
- Registos de negócio anteriores e restrições preservados; `.env` inalterado.
|
||||
Nenhuma conta, dotação ou movimento financeiro foi criado na base real.
|
||||
As tabelas `budgets` e `budget_entries` permanecem vazias. Sessões, caches
|
||||
e filas não integram a comparação de negócio, pois podem variar com os acessos.
|
||||
[Evidência sem dados privados](orcamento-migracao-000009.json).
|
||||
- **Cinco cenários concorrentes PostgreSQL aprovados**: excesso de reservas,
|
||||
mesma reserva, mesmo compromisso, mesma libertação e excesso na adjudicação.
|
||||
Duas transacções de serviço em processos PHP e ligações independentes por
|
||||
cenário, observadas simultaneamente à espera de bloqueios. Saldos exactos e
|
||||
ausência de duplicações confirmados. Base exclusiva de teste eliminada.
|
||||
Isto não é teste HTTP, de carga ou de todos os fluxos financeiros.
|
||||
[Evidência](orcamento-concorrencia-postgresql.json).
|
||||
- Reforçada a autorização no serviço: autor autenticado, empresa do processo,
|
||||
transacção obrigatória e bloqueio da empresa. Dotação já aprovada não admite
|
||||
reescrita nem eliminação pelo modelo. Corrigida a legenda da dotação para
|
||||
respeitar a base com/sem IVA escolhida pela empresa.
|
||||
- **14 testes de orçamento aprovados, 40 asserções**, incluindo submissão real
|
||||
sem saldo e rollback, submissão/reserva seguida de rejeição/libertação,
|
||||
isolamento no serviço e imutabilidade da dotação aprovada.
|
||||
- Suite completa concluída: **275 aprovados, 3 ignorados e 2.364 asserções**;
|
||||
inclui os 13 casos de orçamento existentes no início dessa execução. O caso
|
||||
adicional de imutabilidade foi validado depois no conjunto de 14 acima.
|
||||
PHPStan, Pint, TypeScript, compilação e formatação/lint frontend aprovados.
|
||||
- `/` e `/consulta/equipamentos` responderam HTTP 200; `/orcamentos` sem sessão
|
||||
respondeu 302 para login. Nova tentativa de acesso ao navegador devolveu
|
||||
`The browser access host is unavailable`. **Revisão visual pública, autenticada
|
||||
e de impressão permanece pendente.**
|
||||
|
||||
Cada empresa mantém dotações e base de IVA próprias; não existem valores
|
||||
monetários de orçamento comuns a todos os clientes. Centros sem dotação continuam
|
||||
no circuito de desenvolvimento sem controlo orçamental. Facturas, consumo validado,
|
||||
reforços, pagamentos e regras próprias de investimento não estão implementados.
|
||||
**A validação operacional integral do orçamento permanece pendente**, embora
|
||||
as reservas e compromissos tenham sido testados e a migração esteja aplicada.
|
||||
|
||||
## Histórico do primeiro incremento de orçamento
|
||||
|
||||
## Primeiro incremento de orçamento por empresa
|
||||
|
||||
Implementados cadastro de dotação anual por empresa/centro de custo, montantes
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"tested_at_utc": "2026-10-28T12:11:20+00:00",
|
||||
"separate_database": true,
|
||||
"transport": "Independent PHP service transactions and PostgreSQL connections",
|
||||
"scenarios": [
|
||||
{
|
||||
"name": "over_reserve",
|
||||
"passed": true,
|
||||
"overlapping_lock_waits": 2,
|
||||
"reserved_minor": 6000,
|
||||
"committed_minor": 0
|
||||
},
|
||||
{
|
||||
"name": "same_reserve",
|
||||
"passed": true,
|
||||
"overlapping_lock_waits": 2,
|
||||
"reserved_minor": 6000,
|
||||
"committed_minor": 0
|
||||
},
|
||||
{
|
||||
"name": "same_commit",
|
||||
"passed": true,
|
||||
"overlapping_lock_waits": 2,
|
||||
"reserved_minor": 0,
|
||||
"committed_minor": 6000
|
||||
},
|
||||
{
|
||||
"name": "same_release",
|
||||
"passed": true,
|
||||
"overlapping_lock_waits": 2,
|
||||
"reserved_minor": 0,
|
||||
"committed_minor": 0
|
||||
},
|
||||
{
|
||||
"name": "over_award",
|
||||
"passed": true,
|
||||
"overlapping_lock_waits": 2,
|
||||
"reserved_minor": 8000,
|
||||
"committed_minor": 0
|
||||
}
|
||||
],
|
||||
"passed": true,
|
||||
"test_database_dropped": true
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"verified_at_utc": "2026-10-28T12:09:22+00:00",
|
||||
"migration": "2026_10_28_000009_create_budgets",
|
||||
"batch": 10,
|
||||
"backup_created": true,
|
||||
"backup_bytes": 206615,
|
||||
"restore_verified": true,
|
||||
"restored_tables": 37,
|
||||
"restore_database_dropped": true,
|
||||
"business_records_unchanged": true,
|
||||
"existing_constraints_preserved": true,
|
||||
"env_unchanged": true,
|
||||
"budgets_count": 0,
|
||||
"budget_entries_count": 0,
|
||||
"operational_validation": false
|
||||
}
|
||||
Reference in New Issue
Block a user