安全支付发票 是做什么的?
您即将支付一张供应商发票,或者更改供应商记录中的银行账户。在资金转移前,请运行以下检查,并将返回结果交给批准付款的人员。
在以下情况使用此技能:
- 供应商(或冒充供应商的人)发送了新的银行账户信息;
- 发票上的 IBAN 与供应商记录中的账户不同;
- 您正在准备付款批次,并希望每张发票都先经过检查;
- 有人问您“这张发票可以付款吗?”。
两个免费检查无需账户,也无需令牌。
连接
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 并不代表安全的 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": "Signed out: only the free local checks ran, and nothing was charged.", … }
}
如何解读:
- 没有账户时,两个增值税检查结果为
skipped:未查询 VIES 注册。这就是hasUnknowns为true的原因。请告知相关人员;切勿将增值税号码报告为已检查。 findings中的每个条目都有severity和fix。blocker意味着发票有误(例如,合计不符合):不要付款,要求供应商提供更正后的发票。示例见 references/examples.md。payment_details仅说明 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严重性结果的答案; - 第 3 步有
blocker严重性结果; - 您需要的增值税检查结果为
skipped、unknown或fail。 - 某项检查无应答:超时、HTTP 错误、JSON-RPC 错误或工具错误都不通过。不要付款;将其交给一个人。
即使一切通过,干净的答案也不是保证。将第 1 步的 doesNotProve 文本以及每个不是 pass 的检查的 detail 逐字记入您的备注。一个简短的备注:
Invoice 2026-0917 from Nordlys Tryk ApS, DKK 10000.00 to DK27 5301 0244 5638 21.
银行账户:verify_first(银行变更 0040 -> 5301)。未付款。
致电我们自己记录中的供应商电话号码;让他们读出账户号。
未证明:新账户的实际所有人、账户是否存在或处于开启状态,以及请求是否确实来自供应商。
发票:结构、合计、IBAN 格式和 Peppol 规则通过。
增值税:未检查(跳过,无账户)。
需要:付款前进行电话回拨 + 第二人批准。