安全支付發票 是做什麼的?
您即將支付供應商發票或變更廠商記錄中的銀行帳戶。在任何資金移轉之前,請執行以下檢查,並將結果提供給核准付款的人員。
在以下情況使用此技能:
- 供應商(或冒充供應商的人)發送了新的銀行資料;
- 發票上的 IBAN 與廠商記錄中的帳戶不符;
- 您準備付款批次並希望先檢查每張發票;
- 當您被問到「這張發票可以付款嗎?」。
兩項免費檢查不需要帳戶或令牌。
連接
MCP 伺服器(Streamable HTTP,JSON-RPC 2.0):
{
"mcpServers": {
"jithox": { "url": "https://jithox.com/api/mcp" }
}
}
普通的 HTTP 也能運作;以下每個範例都是 curl 呼叫。請按所示設定您自己的 User-Agent,以便將這些呼叫與其他流量區分開來。
步驟 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": "行項目總額和增值稅與發票上的金額相符。", … },
{ "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": "未登入:僅執行了免費的本地檢查,未收取任何費用。", … }
}
如何解讀:
- 若無帳戶,兩項增值稅檢查會顯示
skipped:未查詢 VIES 註冊庫。這就是hasUnknowns為 true 的原因。請向負責人說明;切勿回報增值稅號碼已通過檢查。 findings中的每個項目都有severity和fix。blocker表示發票有誤(例如,總額不符):請勿付款,並要求供應商提供更正後的發票。範例請參閱 references/examples.md。payment_details僅表示 IBAN 格式正確。該 IBAN 是否為供應商的帳戶,由步驟 1 而非此檢查負責。
步驟 3 - 來自歐盟註冊庫的增值稅號碼:review_invoice(付費)
僅在步驟 2 之後執行此步驟。它會重複結構化發票檢查,並加入對供應商和客戶增值稅號碼的歐盟 VIES 註冊庫檢查。其即時輸入架構會讀取付款和申報的發票總額。此步驟需要一個令牌:
- 由一個人(非代理)在 https://jithox.com/mcp/account#connection 建立 Jithox 連線。
- 代理在 /api/oauth/token 交換連線的 ID 和密碼以取得令牌:
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 回應。獲取一個新令牌並再試一次。
- 使用令牌呼叫工具(發票欄位直接放入
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": "無法對增值稅號碼 DK31500060 做出判定。VIES 註冊庫沒有回應。", "fix": "之後再複查一次。請將其視為未檢查——這並不能證明該號碼是對的或錯的。" },
{ "code": "customer_vat_not_registered", "severity": "blocker", "what": "VIES 不認識增值稅號碼 DK31500044。", "fix": "與客戶核對該號碼——輸入錯誤、已關閉的註冊或非歐盟號碼都可能導致此情況。" }
],
"readyToSend": false,
"hasUnknowns": true,
…
}
}
unknown 不等於通過:註冊庫沒有回應,因此該號碼未經檢查。供應商增值稅號碼出現 fail 是暫停付款並進行詢問的理由。這些範例中的增值稅號碼是虛構的,因此註冊庫不認識它們。
步驟 4 - 決定,並說明哪些項目未被檢查
Jithox 從不付款或簽署付款,而且這些呼叫都不會要求提供銀行登入資訊或簽署金鑰。您準備好資料;由一個人核准付款。
當以下任一情況為真時,請暫停付款並將其交給一個人處理:
- 步驟 1 給出的
verdict不是no_change; - 步驟 2 尚未回傳沒有任何嚴重度為
blocker的 findings 的答案; - 步驟 3 有嚴重度為
blocker的 finding; - 您需要的增值稅檢查結果為
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 規則通過。
增值稅:未檢查(已跳過,無帳戶)。
需要:回撥電話 + 第二個核准人,然後才能付款。