Files
compras/docs/conferencia-pendentes-importados.md
T
nala 413c201d97
tests / ci (push) Canceled after 0s
commit5
2026-10-29 22:03:09 +02:00

3.8 KiB

Conferência dos pagamentos pendentes importados

29/10/2026. Continuação solicitada pelo proprietário: desenvolver a ligação seguinte entre pagamentos originais e obrigação comum. Identificador: PAYABLE-IMPORTED-DECISION-v1.

O circuito existente de conferência pode confirmar ou rejeitar pagamentos que estavam pendentes na passagem de histórico. A confirmação reduz o saldo uma única vez; a rejeição conserva o saldo. Não cria pagamentos nem executa transferências.

Preservação e saldo

A importação original e os seus pagamentos permanecem imutáveis. Cada decisão posterior acrescenta um facto em pa_payment_decisions, ligado ao pagamento importado, com sequência por obrigação, fotografia mínima, interveniente e hashes anterior/seguinte. O núcleo comum valida a cadeia e confronta-a com o histórico original actual antes de fornecer o saldo. Alterações estranhas à decisão deixam o saldo indisponível.

O pagamento original e a sua auditoria são actualizados pelo serviço de conferência já existente. A escrita do facto comum e do evento pertence à mesma transacção: uma falha reverte todos os efeitos. Bloqueios de empresa e origem serializam operações; unicidade por pagamento e sequência impede segunda decisão. Repetir a mesma decisão não gera novo abatimento; uma decisão contrária é recusada.

Mantêm-se revalidação do perfil Financeiro, separação do autor, direito explícito validate, banco actual com duas validações elegíveis, exercício actual para confirmação, conflito de interesses e limite do saldo actualizado. A importação não concede direitos adicionais. Novos registos de pagamento sobre obrigações reconhecidas continuam recusados.

Instalação

Migração aditiva preparada: 2026_10_29_000023_create_payable_payment_decisions.php, uma tabela com protecção contra actualização/eliminação em PostgreSQL e SQLite. Não foi aplicada em compras_dev nem na demonstração 8005 nesta entrega.

Capacidade desactivada por defeito: COMMON_PAYABLES_HISTORY_DECISIONS_ENABLED=false. Depende da importação histórica activa, do esquema novo e dos direitos existentes. Não se alteraram configurações, contas, concessões ou dados da instalação local/demonstração. A leitura de decisões já registadas conserva o saldo mesmo quando esta nova capacidade de escrita é desactivada; desactivar o núcleo/histórico completo continua a exigir transição explícita.

Verificação

Regressão geral: 526 testes aprovados, 2 ignorados, 4 383 asserções. PHPStan sem erros e Pint aprovados. Após o último ajuste de tratamento de conflitos/indicação da capacidade, 20 testes específicos passaram com 109 asserções; PHPStan repetido sem erros. Interface PHP com sintaxe válida; nenhuma alteração de recursos React exige novo build nesta entrega.

  • Testes de confirmação/rejeição, repetição, decisão contrária, independência, concessão retirada, capacidade desactivada, falha intermédia, histórico adulterado, saldo zero, limite de saldo e proibição de novos pagamentos.
  • PostgreSQL descartável: principal 11 600 MZN; confirmados originais 3 000, pendente 1 000, rejeitado 500 → saldo inicial 8 600. Dois processos confirmam o mesmo pendente: uma decisão/evento, confirmado total 4 000, saldo 7 600. Importação original preservada, trigger de imutabilidade verificado e falha injectada com reversão completa.
  • Prova: docs/proofs/payable-payment-decisions-pg.json. Bases e utilizadores temporários removidos no final. Revisão visual desta capacidade não realizada.

Para disponibilizar esta conferência na instalação local, o passo seguinte é aplicar/verificar a migração com cópia de recuperação e activar a opção. A demonstração 8005 conserva o cenário que o proprietário está a avaliar.