Pagar faturas com segurança
Está prestes a pagar uma fatura de fornecedor ou a alterar a conta bancária num registo de fornecedor. Antes de qualquer dinheiro se mover, execute as verificações abaixo e forneça à pessoa que aprova o pagamento o que elas retornam.
Utilize esta skill quando:
- um fornecedor (ou alguém que se passa pelo fornecedor) envia novos dados bancários;
- o IBAN numa fatura difere da conta no registo do fornecedor;
- prepara uma execução de pagamentos e deseja que cada fatura seja verificada primeiro;
- lhe perguntam "esta fatura está OK para pagar?".
As duas verificações gratuitas não precisam de conta nem de token.
Conectar
Servidor MCP (Streamable HTTP, JSON-RPC 2.0):
{
"mcpServers": {
"jithox": { "url": "https://jithox.com/api/mcp" }
}
}
HTTP simples também funciona; todo exemplo abaixo é uma chamada curl. Defina o seu próprio user agent conforme mostrado, para que estas chamadas possam ser distinguidas de outro tráfego.
Passo 1 - uma conta bancária nova ou alterada: check_payment_change
Chame-a quando um fornecedor fornecer uma nova conta, e quando o IBAN na fatura
não for o que está no registo (então o IBAN da fatura é o novo). Deixe
ibanOnFile de fora para um primeiro pagamento a um novo fornecedor; a resposta então dirá
que nada pôde ser comparado.
curl -s https://jithox.com/api/mcp \
-A 'pay-invoices-safely/1.0' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"check_payment_change","arguments":{"newIban":"DK27 5301 0244 5638 21","ibanOnFile":"DK50 0040 0440 1162 43","supplierCountry":"DK"}}}'
O resultado da ferramenta (result.content[0].text), executado em produção em
2026-09-24 e encurtado onde diz …:
{
"kind": "payment_change_check",
"data": {
"verdict": "verify_first",
"summary": "O novo número é uma conta bem formada e nada nele se destaca. Ainda assim, é uma alteração para onde o dinheiro vai: confirme por telefone antes de atualizar o registo.",
"newAccount": { "status": "valid", "iban": "DK27 5301 0244 5638 21", "country": "Denmark", … },
"accountOnFile": { "status": "valid", "iban": "DK50 0040 0440 1162 43", "country": "Denmark", … },
"flags": [
{ "code": "bank_changed", "severity": "note", "what": "Mesmo país, banco diferente (identificador 0040 → 5301). Normal por si só — as empresas mudam de banco — e vale a pena mencionar na chamada." }
],
"requiredSteps": [
"Ligue para o fornecedor num número de telefone dos SEUS próprios registos ou de uma fatura anterior e paga — nunca de um número do pedido de alteração ou da sua assinatura de e-mail.",
"Peça que leiam o novo número de conta de volta para si; não o leia para eles.",
"Peça a uma segunda pessoa que aprove a alteração no registo do fornecedor antes de qualquer execução de pagamentos.",
"Guarde o pedido, o nome da pessoa com quem falou e a hora da chamada junto com o registo do fornecedor."
],
"doesNotProve": "Quem é o proprietário da nova conta, que ela existe ou está ativa, ou que o pedido veio do fornecedor. Nenhum registo gratuito responde a essas questões. Apenas a chamada de retorno o faz.",
…
}
}
Aja de acordo com verdict:
verdict | O que fazer |
|---|---|
no_change | A mesma conta, escrita de forma diferente. Avance para o passo 2. Se o pedido insistisse que os detalhes eram novos, essa discrepância merece uma chamada. |
verify_first | Não pague e não altere o registo do fornecedor. Entregue as requiredSteps a uma pessoa. |
stop | Bandeiras vermelhas. Não pague, retenha outros pagamentos a este fornecedor, entregue flags e requiredSteps a uma pessoa. |
invalid_new_account | O número não pode ser um IBAN. Não pague. Peça o número ao fornecedor através de um canal que já conhece. |
| Sem resposta (timeout, erro HTTP ou erro de ferramenta) | Não é uma aprovação. Não pague nem altere o registo do fornecedor; entregue a uma pessoa. |
A chamada de retorno é a verificação. Uma pessoa liga para o fornecedor num número de telefone que NÃO vem do e-mail, do pedido de alteração ou da fatura. Você não pode fazer essa chamada por eles, e um IBAN bem formado não é um IBAN seguro.
A mesma chamada para os casos stop, no_change e invalid_new_account está
em references/examples.md.
Passo 2 - a fatura em si: POST /api/invoice/review (gratuito)
Envie a fatura como dados estruturados. Verifica a estrutura, recalcula os totais, verifica o IBAN nela e aplica as regras Peppol BIS Billing 3.0. Sem conta, sem token, sem custos. Tal como review_invoice, lê dados estruturados, não um PDF ou uma digitalização: converta-os primeiro em campos.
curl -s https://jithox.com/api/invoice/review \
-A 'pay-invoices-safely/1.0' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{"invoice":{"invoiceNumber":"2026-0917","issueDate":"2026-09-17","dueDate":"2026-10-17","currency":"DKK","buyerReference":"PO-4471","supplier":{"name":"Nordlys Tryk ApS","countryCode":"DK","vatId":"DK31500060","endpointId":"5790000000012","endpointScheme":"0088"},"customer":{"name":"Havn Logistik A/S","countryCode":"DK","vatId":"DK31500044","endpointId":"5790000000029","endpointScheme":"0088"},"lines":[{"description":"Printing, September","quantity":1,"unitPrice":8000,"vatPercent":25}],"totalWithoutVat":8000,"totalVat":2000,"totalWithVat":10000,"payment":{"iban":"DK27 5301 0244 5638 21"}}}'
Executado em produção em 2026-09-24, encurtado:
{
"review": {
"checks": [
{ "id": "structure", "status": "pass", … },
{ "id": "arithmetic", "status": "pass", "detail": "Os totais das linhas e o IVA correspondem aos montantes na fatura.", … },
{ "id": "payment_details", "status": "pass", "detail": "DK27 5301 0244 5638 21 é um IBAN da Dinamarca estruturalmente válido. Isto não diz que a conta existe ou a quem pertence.", … },
{ "id": "supplier_vat", "status": "skipped", "detail": "O registo VIES não foi consultado: esta execução não tinha um espaço de trabalho autorizado para tal.", … },
{ "id": "customer_vat", "status": "skipped", … },
{ "id": "peppol", "status": "pass", … }
],
"findings": [],
"readyToSend": true,
"hasUnknowns": true,
…
},
"verified": false,
"billing": { "charged": false, "reason": "Sessão não autenticada: apenas as verificações locais gratuitas foram executadas, e nada foi cobrado.", … }
}
Como interpretar:
- Sem uma conta, as duas verificações de IVA são
skipped: o registo VIES não foi consultado. É por isso quehasUnknownsé verdadeiro. Informe a pessoa; nunca reporte os números de IVA como verificados. - Cada entrada em
findingstem umaseveritye umafix. Umblockersignifica que a fatura está errada (por exemplo, um total que não soma): não a pague, peça ao fornecedor uma fatura corrigida. Um exemplo está em references/examples.md. payment_detailsapenas diz que o IBAN é bem formado. Se é a conta do fornecedor é o passo 1, não esta verificação.
Passo 3 - Números de IVA do registo da UE: review_invoice (pago)
Execute isto apenas após o passo 2. Repete as verificações de fatura estruturada e adiciona verificações dos números de IVA do fornecedor e do cliente contra o registo VIES da UE. O seu esquema de entrada ao vivo lê o pagamento e os totais de fatura declarados. Precisa de um token:
- Uma pessoa (não o agente) cria uma conexão Jithox em https://jithox.com/mcp/account#connection.
- O agente troca o id e o segredo da conexão por um token em /api/oauth/token:
curl -s https://jithox.com/api/oauth/token \
-A 'pay-invoices-safely/1.0' \
-H 'Accept: application/json' \
-d grant_type=client_credentials \
-d "client_id=$JITHOX_CLIENT_ID" \
-d "client_secret=$JITHOX_CLIENT_SECRET"
Coloque o access token da resposta em JITHOX_TOKEN. Um token expirado ou recusado
obtém a mesma resposta payment_required que nenhum token. Obtenha um novo
token e tente novamente uma vez.
- Chame a ferramenta com o token (os campos da fatura vão diretamente para
arguments):
curl -s https://jithox.com/api/mcp \
-A 'pay-invoices-safely/1.0' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H "Authorization: Bearer $JITHOX_TOKEN" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"review_invoice","arguments":{"invoiceNumber":"2026-0917","issueDate":"2026-09-17","dueDate":"2026-10-17","currency":"DKK","buyerReference":"PO-4471","supplier":{"name":"Nordlys Tryk ApS","countryCode":"DK","vatId":"DK31500060","endpointId":"5790000000012","endpointScheme":"0088"},"customer":{"name":"Havn Logistik A/S","countryCode":"DK","vatId":"DK31500044","endpointId":"5790000000029","endpointScheme":"0088"},"lines":[{"description":"Printing, September","quantity":1,"unitPrice":8000,"vatPercent":25}],"totalWithoutVat":8000,"totalVat":2000,"totalWithVat":10000,"payment":{"iban":"DK27 5301 0244 5638 21"}}}}'
O preço não está neste ficheiro, porque os preços mudam: leia o campo pricing
de review_invoice em https://jithox.com/mcp.json. Sem um token, a
ferramenta responde payment_required, não executa nada e informa humanUrl e
tokenUrl.
Com um token, executado em produção em 2026-09-24, encurtado:
{
"kind": "invoice_review",
"data": {
"checks": [
…
{ "id": "supplier_vat", "status": "unknown", "source": "eu_vies", "detail": "O registo VIES não respondeu." },
{ "id": "customer_vat", "status": "fail", "source": "eu_vies", "detail": "O VIES reporta este número como não registado." },
…
],
"findings": [
{ "code": "supplier_vat_unverified", "severity": "warning", "what": "Não foi possível chegar a um veredito sobre o número de IVA DK31500060. O registo VIES não respondeu.", "fix": "Reveja novamente mais tarde. Trate como não verificado — não é evidência de que o número é bom ou mau." },
{ "code": "customer_vat_not_registered", "severity": "blocker", "what": "O VIES não conhece o número de IVA DK31500044.", "fix": "Verifique o número com o cliente — um erro de digitação, um registo encerrado ou um número não pertencente à UE teriam todos este aspeto." }
],
"readyToSend": false,
"hasUnknowns": true,
…
}
}
unknown não é uma aprovação: o registo não respondeu, portanto o número não está
verificado. Uma fail no número de IVA do fornecedor é motivo para reter o
pagamento e questionar. Os números de IVA nestes exemplos são fictícios, por isso o
registo não os conhece.
Passo 4 - decidir e informar o que não foi verificado
A Jithox nunca paga e nunca assina um pagamento, e nenhuma destas chamadas pede um login bancário ou uma chave de assinatura. Você prepara; uma pessoa aprova o pagamento.
Retenha o pagamento e entregue-o a uma pessoa quando qualquer uma destas condições for verdadeira:
- o passo 1 deu um
verdictdiferente deno_change; - o passo 2 não retornou uma resposta sem nenhuma descoberta de gravidade
blocker; - o passo 3 tem uma descoberta com gravidade
blocker; - uma verificação de IVA que precisava está
skipped,unknownoufail. - uma verificação não deu resposta: um timeout, um erro HTTP, um erro JSON-RPC ou um erro de ferramenta não é uma aprovação. Não pague; entregue a uma pessoa.
Mesmo quando tudo passa, uma resposta limpa não é uma garantia. Coloque
o texto doesNotProve do passo 1 e o detail de cada verificação que não está
pass na sua nota, palavra por palavra. Uma nota curta:
Fatura 2026-0917 da Nordlys Tryk ApS, DKK 10000.00 para DK27 5301 0244 5638 21.
Conta bancária: verify_first (banco alterado 0040 -> 5301). NÃO paga.
Ligue para o fornecedor no número nos nossos próprios registos; peça que leiam a conta de volta.
Não comprovado: quem é o proprietário da nova conta, que ela existe ou está ativa, ou que o pedido veio do fornecedor.
Fatura: estrutura, totais, formato IBAN e regras Peppol passam.
IVA: não verificado (skipped, sem conta).
Necessário: chamada de retorno + segundo aprovador antes do pagamento.