fix(triggers): advisory lock e fconta corretos em fn_sync_pedido_aprovado_to_erp

- FOR UPDATE é inválido com MAX() no PG 18; substituído por pg_advisory_xact_lock
- fconta=0 violava CHECK (1,2,3,4,5,6,9); corrigido para 1 (padrão SAR)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-24 16:52:10 +00:00
parent 35d0ba68d6
commit ec0b7c1611

View File

@@ -52,12 +52,14 @@ BEGIN
RETURN NEW;
END IF;
-- Próximo número disponível para a empresa (com lock)
-- Lock por empresa para serializar geração do número (FOR UPDATE não
-- é permitido com funções de agregação no PG 18)
PERFORM pg_advisory_xact_lock(NEW.id_empresa::bigint);
SELECT COALESCE(MAX(numero), 0) + 1
INTO v_numero
FROM sig.pedidos
WHERE id_empresa = NEW.id_empresa
FOR UPDATE;
WHERE id_empresa = NEW.id_empresa;
-- Código da pauta (sig usa codigo, SAR armazena id_pauta)
SELECT codigo INTO v_cod_pauta
@@ -171,7 +173,7 @@ BEGIN
COALESCE(NEW.acrescimo, 0),
NEW.num_ped_sar,
1, -- inf_usuario=1: criado pelo SAR
0,
1, -- fconta: CHECK (1,2,3,4,5,6,9) — 1=padrão
0,
0,
0,