LiquidacaoPagar
Liquidação e cancelamento de liquidação de títulos do Contas a Pagar
(tabela SE2) via rotina automática FINA565
do Protheus. Endpoint Tier 3 — verbo no path com
prefixo underscore: /_liquidar e
/_cancelar. POST único com dispatcher por último
segmento da URL.
aTela1 (15-18 elementos posicionais), aTela2 (cabeçalho do novo título), aCols (linhas/cheques) e aEdtVlr (edição de valores) têm chaves string sensíveis e o comportamento muda conforme houver ou não condição de pagamento. Este endpoint é candidato a refinamento iterativo — ver Pendências conhecidas.FINA565 é exceção do padrão Protheus: usa nOper=2 para liquidar (não 3) e nOper=4 para cancelar (não 5).MSBLQL diretamente. Bloqueio relevante recai sobre o fornecedor (SA2) e os títulos origem (SE2).Endpoint OAuth2
Sem credenciais? Você pode pegar o token rodando
./src/scripts/get-token.sh na biblioteca e
colar o access_token aqui no campo de refresh.
Vinculação com o ERP
Convenções
Verbo no path (Tier 3). O endpoint expõe duas ações
via POST único com dispatcher pelo último segmento
da URL: /_liquidar (FINA565 nOper=2) e
/_cancelar (FINA565 nOper=4). Qualquer outro segmento
retorna 404 com mensagem listando as ações aceitas.
Identificação dos títulos por RECNO. A lista
titulos[] traz objetos
{recno, valor, valorJuros, valorMulta, valorDesc}. O
endpoint posiciona a SE2 com DbGoTo(N) e
captura E2_PREFIXO+E2_NUM+E2_PARCELA+E2_TIPO+E2_SALDO
para montar aCols e aEdtVlr.
RECNO inválido ou registro não encontrado retorna
422.
Valor a liquidar default = saldo aberto. Se
valor for omitido, zero ou negativo, o endpoint usa
SE2->E2_SALDO como base. valorLiquido
interno é calculado por
valor + valorJuros + valorMulta - valorDesc.
Cabeçalho da liquidação. Os campos
fornecedor, loja e natureza
são obrigatórios. Ausência de qualquer um retorna
422. moeda default 1
(Real); dataLiquidacao default dDataBase.
Formato de datas. dataLiquidacao
aceita string ISO YYYY-MM-DD. Conversão interna usa
CToD(SubStr(dt,9,2) + "/" + SubStr(dt,6,2) + "/" + SubStr(dt,1,4))
antes de empurrar para aTela1.dData565I/F.
Cancelamento. A ação /_cancelar
aceita apenas numeroLiquidacao (obrigatório). O
número vira sentinela CLIQCAN no
aTela1; aTela2, aCols e
aEdtVlr seguem vazios.
Status HTTP.
200 em sucesso;
400 body ausente ou JSON malformado;
404 ação desconhecida;
422 validação ou FINA565 rejeitou;
500 exceção não tratada.
Liquidação de Títulos a Pagar (FINA565)
Liquidação e cancelamento via FINA565 — Tier 3 (verbo no path)Descrição
Processa a liquidação automática de uma lista de títulos a
pagar via FINA565 com nOper=2
(exceção do mapeamento: FINA565 usa 2 para
liquidar, não 3). Os títulos são identificados por
RECNO em SE2; o endpoint posiciona
cada registro, captura prefixo / número / parcela / tipo /
saldo e monta os arrays aTela1/aTela2/aCols/aEdtVlr
esperados pelo wrapper U_FN565Exc.
Status HTTP.
200— liquidação processada com sucesso.400— body ausente / JSON malformado.422— campo obrigatório ausente, RECNO inválido ou FINA565 rejeitou.500— exceção não tratada.
Cenário
LiquidarRequest) —
varia a combinação de campos por título.
Request body
LiquidarRequest.
1.YYYY-MM-DD). Default dDataBase.SE2.SE2->E2_SALDO.Exemplo da requisição (cenário ativo)
POST https://erpapi.jetme.com.br/api/99/01/WsLiqPagar/_liquidar Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "fornecedor": "000001", "loja": "01", "natureza": "2101", "moeda": 1, "dataLiquidacao": "2026-05-16", "banco": "001", "agencia": "1234", "conta": "12345-6", "titulos": [ { "recno": 22345, "valor": 1500.00 } ] }
POST https://erpapi.jetme.com.br/api/99/01/WsLiqPagar/_liquidar Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "fornecedor": "000001", "loja": "01", "natureza": "2101", "moeda": 1, "dataLiquidacao": "2026-05-16", "banco": "001", "agencia": "1234", "conta": "12345-6", "titulos": [ { "recno": 22345, "valor": 1500.00, "valorJuros": 25.00, "valorMulta": 15.00, "valorDesc": 10.00 } ] }
Respostas
Exemplo de resposta
{
"success": true,
"message": "Liquidacao processada com sucesso.",
"data": "OK"
}
Descrição
Cancela uma liquidação previamente gerada via
FINA565 com nOper=4 (exceção: não
é 5). O cabeçalho aTela1 recebe a sentinela
CLIQCAN com o número da liquidação;
aTela2/aCols/aEdtVlr permanecem vazios.
Status HTTP.
200— cancelamento processado.400— body ausente / JSON malformado.422— número ausente ou FINA565 rejeitou.500— exceção não tratada.
Request body
CLIQCAN).Exemplo da requisição (cenário ativo)
POST https://erpapi.jetme.com.br/api/99/01/WsLiqPagar/_cancelar Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "numeroLiquidacao": "000000010" }
Respostas
Exemplo de resposta
{
"success": true,
"message": "Cancelamento de liquidacao processado com sucesso.",
"data": "OK"
}
Schemas
Definições canônicas — campos com origemSX3 rastreável
POST /_liquidar. Cabeçalho da
liquidação + dados bancários do pagador + lista de títulos
origem identificados por RECNO.
1 (Real).YYYY-MM-DD. Default dDataBase.titulos[]. Identifica o título
origem pelo RECNO em SE2 e
opcionalmente ajusta valor base / juros / multa / desconto.
SE2->E2_SALDO.POST /_cancelar. Identifica a
liquidação pelo número.
CLIQCAN).200 para
_liquidar e _cancelar.
true em 200."OK".400 / 404 /
422 / 500.
false em erro.Cenários
Catálogo de combinações de payload reconhecidas pelas ações/_liquidar e /_cancelar.
Quando usar: pagamento simples no vencimento, dentro do banco pagador padrão.
Pré-condições: existe título em
SE2 com E2_SALDO > 0;
fornecedor não bloqueado; natureza cadastrada.
Próximos passos: guardar
E2_NUMLIQ gerado para eventual cancelamento.
dDataBase.SE2->E2_SALDO.Quando usar: renegociação de título vencido; pagamento adiantado com desconto pontual.
Pré-condições: as três grandezas (
valorJuros, valorMulta,
valorDesc) são opcionais — qualquer combinação
é aceita.
Cálculo:
valorLiquido = valor + valorJuros + valorMulta - valorDesc.
Quando usar: liquidação digitada por engano, pagamento devolvido pelo banco.
Pré-condições: liquidação existente (
E2_NUMLIQ conhecido).
Resultado: 200 OK e os títulos voltam ao estado anterior à liquidação.
Pendências conhecidas (rev1)
FINA565 é complexidade L — candidato a refinamento
iterativo. Os arrays aTela1 (15-18
elementos posicionais), aTela2 (cabeçalho do novo
título), aCols (linhas/cheques) e
aEdtVlr (edição de valores) têm chaves string
sensíveis e o comportamento muda conforme houver ou não condição
de pagamento. Se o smoke falhar com erro de
aTela1/aTela2/aCols/aEdtVlr, abrir TASK dedicada para
investigação. A implementação atual segue o doc TDN no
que pôde ser inferido sem rodar a tela interativa em paralelo;
ajustes finos virão dos primeiros happy-path reais.
Smoke happy-path requer RECNO real. O
script test-liquidacao-pagar.sh cobre apenas
negativos por default; happy-path precisa --recno N
com RECNO válido de título SE2 liquidável.
Refinar para descobrir RECNO automaticamente via fornecedor
sentinel no próximo ciclo.
Condição de pagamento fixa em "001" no
aTela2. O wrapper hardcoda
cCondicao="001" e cTipo="NF" em
aTela2. Em produção real, esses valores podem
variar por fornecedor / filial — evoluir para aceitar override
pelo payload assim que primeiro caso de uso aparecer.
Sem GET de consulta da liquidação gerada.
Endpoint de processo; não expõe consulta direta. Avaliar GET
_byNumLiq em revisão futura conforme demanda do
front.
Identificação por RECNO acopla integração ao layout
físico. Evolução natural: aceitar também
{prefixo,num,parcela,tipo} e resolver internamente
para RECNO. Sem pressa enquanto o front consumir só
o endpoint de listagem de títulos a pagar.