Valida concorrencia PostgreSQL da revisao de compras
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
# Proposta para validação: cancelamento de ordens emitidas
|
||||
|
||||
Estado: proposta de produto, ainda não implementada nem activada.
|
||||
Data: 28 de Outubro de 2026. Cada empresa aderente conserva os seus valores,
|
||||
políticas, utilizadores e aprovações; não se criam limites financeiros comuns.
|
||||
|
||||
## Âmbito inicial proposto
|
||||
|
||||
Permitir cancelar uma ordem emitida apenas quando não exista qualquer
|
||||
recepção, factura ou pagamento associado ao processo. Se existir algum desses
|
||||
registos, encaminhar para um circuito futuro de devolução, estorno ou nota de
|
||||
crédito; não apagar nem corrigir automaticamente documentos ou movimentos.
|
||||
|
||||
Compras apresenta fundamento e documentação de suporte. Finanças decide,
|
||||
com utilizador distinto do solicitante original, do autor da adjudicação,
|
||||
do emissor da ordem e do autor do pedido de cancelamento. A empresa activa
|
||||
explicitamente este circuito através de uma política própria com vigência e
|
||||
aprovações administrativas, seguindo o mecanismo de publicação já existente.
|
||||
Sem política publicada aplicável, o cancelamento continua indisponível.
|
||||
|
||||
O pedido pendente suspende novas operações sobre a ordem. A rejeição mantém
|
||||
a ordem e o compromisso financeiro originais. A aprovação marca a ordem e
|
||||
o processo como cancelados, conservando número, linhas, versões, documentos,
|
||||
decisões e histórico. Não elimina nem altera a fotografia original da ordem.
|
||||
|
||||
A libertação do compromisso será um novo lançamento de reversão, ligado à
|
||||
ordem e ao cancelamento, exactamente uma vez e na mesma transacção da decisão.
|
||||
O lançamento original permanece intacto. Não se simula um pagamento ou
|
||||
reembolso e não há transferências bancárias.
|
||||
|
||||
Só o solicitante original pode depois preparar uma nova requisição ligada ao
|
||||
processo cancelado, com nova data e justificação. O novo processo começa em
|
||||
rascunho, sem copiar decisões, propostas, validações técnicas ou reserva.
|
||||
|
||||
Esta é uma proposta de circuito inicial suportado pelo software. A publicação
|
||||
de uma política real e os seus parâmetros continuam a ser decisões de cada
|
||||
empresa. A validação desta proposta não publica políticas nem cancela ordens.
|
||||
|
||||
## Verificações exigidas antes da entrega
|
||||
|
||||
- Isolamento entre empresas e segregação de funções, incluindo perfis alterados.
|
||||
- Recusa após recepção, factura ou pagamento; nenhuma eliminação de histórico.
|
||||
- Decisões imutáveis, repetição idempotente e reversão única do compromisso.
|
||||
- Rollback conjunto de estado, lançamento financeiro e auditoria.
|
||||
- Concorrência PostgreSQL entre cancelamento, recepção e outros movimentos.
|
||||
- Revisão visual pública, autenticada e de impressão quando o navegador permitir.
|
||||
|
||||
## Decisão solicitada
|
||||
|
||||
Validar este primeiro âmbito: **cancelamento de ordens emitidas exclusivamente
|
||||
sem recepção, factura ou pagamento, com decisão independente de Finanças e
|
||||
reversão auditada do compromisso**, sujeito à activação explícita por empresa.
|
||||
|
||||
Não inclui cancelamento parcial, devoluções, reembolsos, estornos de facturas
|
||||
ou pagamentos, nem operações com documentos posteriores já registados.
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"tested_at_utc": "2026-10-28T15:58:21+00:00",
|
||||
"separate_database": true,
|
||||
"transport": "Independent PHP service transactions and PostgreSQL connections",
|
||||
"fixture": "Guarded synthetic fixtures; issuance controls and issue-versus-request races use service-selected and service-approved awards",
|
||||
"scenarios": [
|
||||
{
|
||||
"name": "same_approval",
|
||||
"passed": true,
|
||||
"overlapping_lock_waits": 2,
|
||||
"state": "approved",
|
||||
"release_count": 1,
|
||||
"revision_count": 0
|
||||
},
|
||||
{
|
||||
"name": "conflicting_decisions",
|
||||
"passed": true,
|
||||
"overlapping_lock_waits": 2,
|
||||
"state": "approved",
|
||||
"release_count": 1,
|
||||
"revision_count": 0
|
||||
},
|
||||
{
|
||||
"name": "same_revision",
|
||||
"passed": true,
|
||||
"overlapping_lock_waits": 2,
|
||||
"state": "approved",
|
||||
"release_count": 1,
|
||||
"revision_count": 1
|
||||
},
|
||||
{
|
||||
"name": "pending_issuance",
|
||||
"passed": true,
|
||||
"overlapping_lock_waits": 2,
|
||||
"state": "pending",
|
||||
"release_count": 0,
|
||||
"revision_count": 0
|
||||
},
|
||||
{
|
||||
"name": "same_issue_control",
|
||||
"passed": true,
|
||||
"overlapping_lock_waits": 2,
|
||||
"order_count": 1,
|
||||
"cancellation_count": 0,
|
||||
"committed_minor": 10000
|
||||
},
|
||||
{
|
||||
"name": "issue_versus_request",
|
||||
"passed": true,
|
||||
"overlapping_lock_waits": 2,
|
||||
"order_count": 0,
|
||||
"cancellation_count": 1,
|
||||
"committed_minor": 0
|
||||
}
|
||||
],
|
||||
"passed": true,
|
||||
"test_database_dropped": true
|
||||
}
|
||||
@@ -42,9 +42,17 @@ criadas políticas ou operações fictícias na base real. Ver relatório
|
||||
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 PostgreSQL deste
|
||||
novo circuito continua pendente; os 32 cenários do incremento anterior não
|
||||
comprovam a concorrência destas operações novas.
|
||||
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.
|
||||
|
||||
Reference in New Issue
Block a user