Implementa registo e conferencia de pagamentos externos

This commit is contained in:
2026-10-28 14:51:53 +02:00
parent f0f7b8ce9d
commit c41628d738
25 changed files with 1279 additions and 10 deletions
+12 -2
View File
@@ -6,7 +6,7 @@ Estado actualizado em 28 de Outubro de 2026. Projecto activo: C:\laragon\www\com
| ------------------------ | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| 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, anexos privados e versões bancárias com duas validações | Integração futura com pagamentos |
| Fornecedores | Cadastro, anexos privados e versões bancárias com duas validações | Múltiplas contas e verificação bancária externa |
| 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 |
@@ -15,7 +15,7 @@ Estado actualizado em 28 de Outubro de 2026. Projecto activo: C:\laragon\www\com
| 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 | Registo por empresa, conferência, validação independente e consumo orçamental | Pagamentos, notas de crédito e anexos |
| Facturas e pagamentos | Facturas, consumo e registo/conferência de pagamentos externos | Estornos, notas de crédito e anexos |
| 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 |
@@ -23,6 +23,16 @@ Preservar enums, políticas, modelos relacionais, Brick Math e isolamento por em
## Verificação actual
Registo e conferência de pagamentos externos entregues, com liquidação parcial,
independência, revalidação bancária e consumo orçamental sem duplicação.
Suite actual: **347 aprovados, 3 ignorados e 2.630 asserções**.
Migração 000012 aplicada no lote 13 após backup e restauro verificados de 44
tabelas. Três cenários concorrentes PostgreSQL e 33 testes específicos aprovados.
Tabela de pagamentos externos vazia na base real. Não executa transferências.
Reforços, estornos, investimento e revisão visual continuam pendentes.
### Histórico da entrega de dados bancários
Dados bancários entregues: versões por empresa/fornecedor, duas decisões
independentes de Finanças, campos sensíveis cifrados e consultas restritas.
Migração 000011 no lote 12 após backup e restauro verificados de 42 tabelas.
+72
View File
@@ -1,5 +1,77 @@
# Desenvolvimento do SGC
## Registo e conferência de pagamentos externos
Implementado `/pagamentos`, por empresa. Finanças regista pagamentos já
efectuados fora do SGC, com factura validada, montante explícito, data efectiva,
referência externa e evidência. Outra pessoa de Finanças confirma ou rejeita a
conferência. O sistema **não executa transferências, remessas ou ordens bancárias**.
- Apenas os registos confirmados abatem a dívida da factura. Liquidação parcial
ou total é calculada a partir desse histórico; não reescreve a factura validada.
Pendentes/rejeitados não abatem o saldo. A confirmação não lança novamente
consumo ou compromisso orçamental: o orçamento foi consumido na factura.
- Montante deve ser positivo e caber no saldo confirmado ainda pendente. Duas
confirmações concorrentes não podem exceder a factura. Referência normalizada
única por empresa; repetição idêntica pelo autor devolve o registo existente,
enquanto dados diferentes para a mesma referência são recusados.
- Registo e confirmação revalidam factura, fornecedor, conflitos, moeda e
versão bancária mais recente com duas validações elegíveis. Versão alterada,
fornecedor suspenso, perda de perfil ou conflito posterior bloqueiam confirmação.
Registos históricos já confirmados não são reescritos por mudanças posteriores.
- Uma operação externa corresponde a uma factura nesta etapa. Datas entre
exercícios, câmbio, adiantamentos, estornos, reembolsos, anulação de confirmados
e repartição da mesma operação por várias facturas não estão implementados.
Uma referência de evidência não é upload de comprovativo nem verificação bancária.
- Referência externa, evidência, fundamento e snapshot bancário são cifrados.
Snapshot preserva versão, conta e validadores do momento do registo; não é
exposto na listagem. Administração consulta metadados; Finanças consulta
referências/evidência com auditoria. Outros perfis não acedem ao módulo.
Auditoria contém IDs, montantes e estados, sem referências externas nem números
bancários. Histórico Inertia cifrado, resposta sem cache e dados sensíveis
excluídos de input antigo de sessão. Preservar a chave de aplicação no restauro.
- Modelos impedem edição do registo e eliminação. Decisão final é imutável;
falha na auditoria reverte registo ou confirmação. Protecção contra SQL
administrativo directo continua dependente das permissões da base de dados.
- `/consulta/pagamentos` contém apenas exemplos fictícios. Valores operacionais
vêm das facturas da própria empresa e do montante introduzido; não há valores
financeiros predefinidos para clientes. Moeda suportada nesta etapa: MZN,
coincidente com a conta; sem autorização implícita para conversões.
### Verificação e migração
Suite completa actual: **347 aprovados, 3 ignorados, 2.630 asserções**.
PHPStan, Pint, TypeScript, compilação e formatação/lint frontend aprovados.
O serviço recarrega o perfil do operador depois do bloqueio da empresa e
bloqueia os registos dos validadores bancários durante a conferência.
33 testes específicos aprovados, 107 asserções: liquidação parcial/total, limites, idempotência,
versões bancárias, perfis, conflitos, moedas, isolamento, cifragem, privacidade,
input não guardado, ausência de consumo duplicado, auditoria e rollback.
Três cenários concorrentes PostgreSQL aprovados com duas ligações independentes
observadas simultaneamente à espera de bloqueios: excesso, mesma confirmação
e pagamentos complementares. Saldos e manutenção do consumo orçamental conferidos;
base temporária eliminada. São testes de serviço, não de carga ou HTTP.
[Evidência](pagamentos-concorrencia-postgresql.json).
Migração 000012 aplicada no **lote 13**, após backup custom PostgreSQL 17 de
**239.843 bytes** e restauro verificado das **44 tabelas** anteriores numa base
temporária, depois eliminada. Snapshot consistente para dump e manifesto.
Registos de negócio, restrições e `.env` preservados. Tabela de pagamentos
externos vazia; sem seeds, contas novas, alterações de credenciais ou pagamentos
fictícios na base real. Backup e manifesto privados, fora do Git.
[Evidência sem dados privados](pagamentos-migracao-000012.json).
### Pendências e próximo incremento
O navegador continua indisponível (`The browser access host is unavailable`).
**Revisão visual pública, autenticada e de impressão permanece pendente.**
Este incremento não constitui integração bancária, confirmação bancária automática
ou validação operacional integral do orçamento. Documentos continuam de desenvolvimento.
Próximo incremento: reforços orçamentais auditados, propostos e aprovados por
pessoas distintas, com valores definidos por cada empresa. Regras de investimento
também continuam por definir por cliente; equipamento permanece bloqueado.
## Dados bancários de fornecedores com dupla validação
Implementado no mesmo projecto, com dados isolados por empresa/fornecedor.
+10
View File
@@ -1,5 +1,15 @@
# Continuidade do desenvolvimento do SGC
## Próxima etapa após pagamentos externos
Registo e conferência independente de pagamentos externos já implementados,
com migração 000012 aplicada. Não repetir as etapas históricas abaixo.
Prosseguir com reforços orçamentais por empresa/centro/exercício, sem reescrever
a dotação inicial, com proposta e aprovação por pessoas distintas e auditoria.
Valores definidos por cada empresa. Não implementar transferências bancárias
ou desbloquear investimento sem regra própria aprovada. Revisão visual e
validação operacional integral continuam pendentes; consultar o relatório actual.
## Próxima etapa após dados bancários
Versões bancárias por empresa/fornecedor, cifragem e duas validações distintas
@@ -0,0 +1,33 @@
{
"tested_at_utc": "2026-10-28T12:49:13+00:00",
"separate_database": true,
"transport": "Independent PHP service transactions and PostgreSQL connections",
"scenarios": [
{
"name": "over_payment",
"passed": true,
"overlapping_lock_waits": 2,
"confirmed_minor": 4000,
"outstanding_minor": 2000,
"budget_consumption_unchanged": true
},
{
"name": "same_confirmation",
"passed": true,
"overlapping_lock_waits": 2,
"confirmed_minor": 4000,
"outstanding_minor": 2000,
"budget_consumption_unchanged": true
},
{
"name": "complementary_payments",
"passed": true,
"overlapping_lock_waits": 2,
"confirmed_minor": 6000,
"outstanding_minor": 0,
"budget_consumption_unchanged": true
}
],
"passed": true,
"test_database_dropped": true
}
+15
View File
@@ -0,0 +1,15 @@
{
"verified_at_utc": "2026-10-28T12:46:38+00:00",
"migration": "2026_10_28_000012_create_external_payments",
"batch": 13,
"backup_created": true,
"backup_bytes": 239843,
"restore_verified": true,
"restored_tables": 44,
"restore_database_dropped": true,
"business_records_unchanged": true,
"existing_constraints_preserved": true,
"env_unchanged": true,
"external_payments_count": 0,
"operational_validation": false
}
+3 -1
View File
@@ -7,7 +7,9 @@ Actualização: o utilizador autorizou avançar com a abordagem. Dotações, res
compromissos e conferência de facturas/consumo foram implementados e migrados.
A base de IVA é uma decisão explícita de cada empresa. As secções seguintes
conservam a proposta original; não comprovam aprovação de limites monetários,
tolerâncias ou regras de investimento. Reforços e pagamentos continuam pendentes.
tolerâncias ou regras de investimento. Reforços continuam pendentes. Registo e
conferência de pagamentos externos foram acrescentados depois; não executam
transferências nem substituem a confirmação humana da evidência.
Estado actual em `docs/desenvolvimento.md`.
## Abordagem recomendada