Communitygithub.com

インボイスの安全な支払い

エージェントが請求書を支払う前に、Jithoxのライブチェックを実行し、支払いの安全性を確保します。取引先の銀行口座変更時や請求書のIBANがベンダー記録と異なる場合に使用します。

インボイスの安全な支払い とは?

このスキルは、AIエージェントがサプライヤー請求書の支払いやベンダー記録の銀行口座変更を行う前に、不正や誤りを検出するための一連のチェックを提供します。MCPサーバー(Streamable HTTP、JSON-RPC 2.0)およびプレーンHTTP経由で利用可能で、curl呼び出しで簡単にテストできます。 まず、`check_payment_change`ツールで新しいIBANと既存の記録を比較し、コールバック手順を返します。結果は`verdict`フィールド(`no_change`、`verify_first`、`stop`、`invalid_new_account`)で通知され、支払い実行前に人間の判断が必要かどうかを示します。次に、無料の`POST /api/invoice/review`で請求書の構造、合計金額、IBAN形式、Peppol BIS Billing 3.0ルールをチェックします。アカウントやトークンは不要です。最後に、有料の`review_invoice`ツールで上記チェックに加え、EU VIESレジスタに対する仕入先と顧客のVAT番号検証を実行します。このツールには人間が発行したトークンが必要です。 Jithox自体は支払いを実行または署名せず、エージェントが準備し、人間が承認します。すべてのチェックに合格しても安全が保証されるわけではなく、`doesNotProve`テキストや不合格チェックの詳細をメモに含める必要があります。

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

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

インボイスの安全な支払い は何をしますか?

サプライヤー請求書を支払う、またはベンダー記録の銀行口座を変更しようとしています。資金が移動する前に、以下のチェックを実行し、その結果を支払い承認者に渡してください。

このスキルは以下の場合に使用します:

  • サプライヤー(またはサプライヤーを装った誰か)から新しい銀行口座情報が送られてきた場合
  • 請求書のIBANがベンダー記録の口座と異なる場合
  • 支払い実行を準備しており、各請求書を事前にチェックしたい場合
  • 「この請求書は支払っても問題ないか」と尋ねられた場合

2つの無料チェックはアカウントやトークンを必要としません。

接続

MCPサーバー(Streamable HTTP、JSON-RPC 2.0):

{
  "mcpServers": {
    "jithox": { "url": "https://jithox.com/api/mcp" }
  }
}

プレーンHTTPでも動作します。以下のすべての例はcurl呼び出しです。以下に示すように独自のユーザーエージェントを設定し、これらの呼び出しを他のトラフィックと区別できるようにしてください。

ステップ1 - 新規または変更された銀行口座:check_payment_change

サプライヤーから新しい口座が提示された場合、および請求書のIBANが記録上の口座と異なる場合(その場合、請求書のIBANが新しい口座となります)に呼び出します。新規サプライヤーへの初回支払いの場合はibanOnFileを省略してください。その場合、回答は比較できなかったことを示します。

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"}}}'

ツールの結果(result.content[0].text)、本番環境で2026-09-24に実行、…で省略したもの:

{
  "kind": "payment_change_check",
  "data": {
    "verdict": "verify_first",
    "summary": "新しい番号は適切な形式の口座であり、特に問題は見られません。ただし、資金の送金先が変わることには変わりありません。記録を更新する前に電話で確認してください。",
    "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": "同一国内、異なる銀行(識別子 0040 → 5301)。通常は問題ありません。企業は銀行を変更することがあります。電話で言及する価値があります。" }
    ],
    "requiredSteps": [
      "サプライヤーに、自社の記録または過去の支払済み請求書に記載されている電話番号に電話してください。変更要求やそのメール署名に記載された番号は使用しないでください。",
      "新しい口座番号を読み上げさせてください。こちらから読み上げないでください。",
      "支払いが実行される前に、別の担当者にベンダー記録の変更を承認させてください。",
      "変更要求、通話した相手の名前、通話時刻をベンダー記録と共に保管してください。"
    ],
    "doesNotProve": "新しい口座の所有者、その口座が存在するか開設されているか、または要求がサプライヤーからのものであるかは証明されません。無料のレジストリではこれらに回答できません。コールバックのみが証明します。",
    …
  }
}

verdictに基づいて行動する:

verdictあなたの行動
no_change同じ口座が異なる形式で書かれているだけです。ステップ2に進んでください。要求が新しい口座だと主張していた場合、その不一致は電話で確認する価値があります。
verify_first支払わず、ベンダー記録も変更しないでください。requiredStepsを人間に渡してください。
stop危険信号です。支払わず、このサプライヤーへの他の支払いも保留し、flagsとrequiredStepsを人間に渡してください。
invalid_new_account番号がIBANではありません。支払わないでください。既に知っているチャネルを通じてサプライヤーに番号を問い合わせてください。
回答なし(タイムアウト、HTTPエラー、またはツールエラー)合格ではありません。支払わず、ベンダー記録も変更しないでください。人間に渡してください。

コールバックがチェックです。人間が、メール、変更要求、請求書のいずれからも取得しない電話番号でサプライヤーに電話します。あなたはその電話を代わりに行うことはできません。適切な形式のIBANは安全なものではありません。

stop、no_change、invalid_new_accountの場合の同様の呼び出しは、references/examples.mdにあります。

ステップ2 - 請求書自体:POST /api/invoice/review(無料)

請求書を構造化データとして送信します。構造をチェックし、合計を再計算し、IBANをチェックし、Peppol BIS Billing 3.0ルールを適用します。アカウント、トークン、料金は不要です。review_invoiceと同様に、PDFやスキャンではなく構造化データを読み取ります。それらは事前にフィールドに変換してください。

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"}}}'

本番環境で2026-09-24に実行、省略したもの:

{
  "review": {
    "checks": [
      { "id": "structure", "status": "pass", … },
      { "id": "arithmetic", "status": "pass", "detail": "明細行の合計とVATが請求書の金額と一致します。", … },
      { "id": "payment_details", "status": "pass", "detail": "DK27 5301 0244 5638 21 は構造的に有効なデンマークのIBANです。これは口座が存在することやその所有者を示すものではありません。", … },
      { "id": "supplier_vat", "status": "skipped", "detail": "VIESレジスタは照会されませんでした。この実行には許可されたワークスペースがありませんでした。", … },
      { "id": "customer_vat", "status": "skipped", … },
      { "id": "peppol", "status": "pass", … }
    ],
    "findings": [],
    "readyToSend": true,
    "hasUnknowns": true,
    …
  },
  "verified": false,
  "billing": { "charged": false, "reason": "Signed out: only the free local checks ran, and nothing was charged.", … }
}

読み方:

  • アカウントがない場合、2つのVATチェックはskippedになります。VIESレジスタは照会されませんでした。そのためhasUnknownsがtrueになります。その旨を人間に伝えてください。VAT番号がチェックされたと報告しないでください。
  • findings内のすべてのエントリにはseverityとfixがあります。blockerは請求書が間違っていることを意味します(例:合計が合わない)。支払わず、サプライヤーに修正された請求書を依頼してください。例はreferences/examples.mdにあります。
  • payment_detailsはIBANが適切な形式であることのみを示します。それがサプライヤーの口座であるかどうかはステップ1の範囲であり、このチェックでは判断しません。

ステップ3 - EUレジスタからのVAT番号:review_invoice(有料)

ステップ2の後でのみ実行してください。構造化された請求書チェックを繰り返し、EU VIESレジスタに対する仕入先と顧客のVAT番号チェックを追加します。ライブ入力スキーマは支払い情報と宣言された請求書合計を読み取ります。トークンが必要です:

  1. 人間(エージェントではない)が https://jithox.com/mcp/account#connection でJithox接続を作成します。
  2. エージェントは接続のIDとシークレットを /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"

回答からアクセストークンを取得し、JITHOX_TOKENに設定します。期限切れまたは拒否されたトークンは、トークンなしと同じpayment_required応答になります。新しいトークンを1つ取得し、もう一度試してください。

  1. トークンを指定してツールを呼び出します(請求書フィールドは直接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"}}}}'

価格はこのファイルには記載されていません。価格は変わるためです。https://jithox.com/mcp.json の review_invoice の pricing フィールドを参照してください。トークンがない場合、ツールは payment_required と応答し、何も実行せず、humanUrl と tokenUrl を返します。

トークンを使用し、本番環境で2026-09-24に実行、省略したもの:

{
  "kind": "invoice_review",
  "data": {
    "checks": [
      …
      { "id": "supplier_vat", "status": "unknown", "source": "eu_vies", "detail": "VIESレジスタが応答しませんでした。" },
      { "id": "customer_vat", "status": "fail", "source": "eu_vies", "detail": "VIESはこの番号が登録されていないと報告しています。" },
      …
    ],
    "findings": [
      { "code": "supplier_vat_unverified", "severity": "warning", "what": "VAT番号 DK31500060 について判定に至ることができませんでした。VIESレジスタが応答しませんでした。", "fix": "後でもう一度確認してください。これはチェックされていないものとして扱ってください。番号が良いか悪いかの証拠にはなりません。" },
      { "code": "customer_vat_not_registered", "severity": "blocker", "what": "VIESはVAT番号 DK31500044 を認識していません。", "fix": "顧客と番号を確認してください。タイプミス、登録の閉鎖、またはEU域外の番号はすべてこのように表示されます。" }
    ],
    "readyToSend": false,
    "hasUnknowns": true,
    …
  }
}

unknownは合格ではありません。レジスタが応答しなかったため、番号はチェックされていません。仕入先のVAT番号のfailは支払いを保留し問い合わせる理由になります。これらの例のVAT番号は架空のものであるため、レジスタはそれらを認識しません。

ステップ4 - 判断し、チェックされなかったことを伝える

Jithoxは決して支払いを実行したり署名したりしません。また、これらの呼び出しのいずれも銀行のログインや署名キーを要求しません。あなたが準備し、人間が支払いを承認します。

以下のいずれかが当てはまる場合、支払いを保留し、人間に渡してください:

  • ステップ1がno_change以外のverdictを返した場合
  • ステップ2がblockerの重大度を持つ所見なしの回答を返していない場合
  • ステップ3にblockerの重大度を持つ所見がある場合
  • 必要なVATチェックがskipped、unknown、またはfailである場合
  • チェックが回答を返さなかった場合。タイムアウト、HTTPエラー、JSON-RPCエラー、ツールエラーは合格ではありません。支払わず、人間に渡してください。

すべてに合格した場合でも、クリーンな回答は保証ではありません。ステップ1のdoesNotProveテキストと、passではないすべてのチェックのdetailを、一言一句そのままメモに含めてください。短いメモの例:

請求書 2026-0917 Nordlys Tryk ApS より、DKK 10000.00、送金先 DK27 5301 0244 5638 21。
銀行口座: verify_first(銀行変更 0040 -> 5301)。未払い。
  自社の記録にある番号でサプライヤーに電話。口座番号を読み上げさせる。
  証明されていないこと:新しい口座の所有者、口座の存在または開設状況、要求がサプライヤーからのものであること。
請求書: 構造、合計、IBAN形式、Peppolルールは合格。
VAT: チェックされていません(スキップ、アカウントなし)。
必要なもの: コールバック + 支払い前の第二承認者。

関連スキル