Communitygithub.com

pagar-faturas-com-seguranca

Use esta skill para pagar faturas com segurança: execute as verificações ao vivo da Jithox antes que um agente pague uma fatura de fornecedor ou altere a conta bancária de um fornecedor. Use-a em toda alteração bancária de fornecedor (um novo IBAN num e-mail, ou um IBAN na fatura diferente do registo do fornecedor), como verificação de pagamento antes de uma execução de pagamentos, e para reter um pagamento para uma conta desviada - uma fraude comum em faturas - até que uma pessoa tenha ligado para o fornecedor de volta. check_payment_change compara o novo IBAN com a conta registada e devolve as etapas de retorno de chamada. POST /api/invoice/review verifica a estrutura da fatura, totais, IBAN e regras Peppol BIS Billing 3.0, gratuitamente e sem conta. A review_invoice paga repete essas verificações estruturadas e adiciona verificações de IVA do fornecedor e cliente contra o VIES da UE. Execute sempre a revisão gratuita primeiro. A Jithox nunca paga ou assina um pagamento; o agente prepara, uma pessoa decide.

O que é pagar-faturas-com-seguranca?

Esta skill, 'pay-invoices-safely', foi projetada para evitar fraudes em pagamentos de faturas, automatizando verificações de segurança críticas antes que um agente de IA processe um pagamento ou altere dados bancários de fornecedor. Ela é útil porque a fraude de desvio de pagamento é comum: um agente poderia ser enganado por um e-mail falso com novos dados bancários. A skill integra-se com a API Jithox (via MCP ou HTTP simples) para executar duas verificações principais: 'check_payment_change', que compara um novo IBAN com o registado e retorna medidas de segurança (como 'ligar para o fornecedor de volta'), e 'review_invoice', que analisa a estrutura da fatura e valida IVA contra o registo VIES da UE. A primeira verificação é gratuita; a segunda, que inclui validação de IVA, requer uma conta paga. A skill suporta plataformas como Claude Code, Cursor e Codex via MCP, e enfatiza que o agente nunca toma a decisão final de pagamento – ele prepara a análise para que uma pessoa aprove. As instruções são claras: reter o pagamento se alguma verificação falhar, e documentar exatamente o que não foi comprovado.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/victor-emmanuel-c/jithox-mcp/tree/main/skills/pay-invoices-safely

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

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:

verdictO que fazer
no_changeA 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_firstNão pague e não altere o registo do fornecedor. Entregue as requiredSteps a uma pessoa.
stopBandeiras vermelhas. Não pague, retenha outros pagamentos a este fornecedor, entregue flags e requiredSteps a uma pessoa.
invalid_new_accountO 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 que hasUnknowns é verdadeiro. Informe a pessoa; nunca reporte os números de IVA como verificados.
  • Cada entrada em findings tem uma severity e uma fix. Um blocker significa 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_details apenas 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:

  1. Uma pessoa (não o agente) cria uma conexão Jithox em https://jithox.com/mcp/account#connection.
  2. 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.

  1. 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 verdict diferente de no_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, unknown ou fail.
  • 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.

Habilidades Relacionadas