发票云(智能特性)
旗舰版标准版智能特性生态版
旗舰版标准版智能特性生态版
  1. 三单匹配
  • 整体介绍
  • 开发指南
  • 授权
    • token获取
      POST
  • 智能特性
    • 文档信息识别
      • 国际发票识别
      • 国际发票识别(明细)
      • 文档信息识别(反馈)
      • 银行回单识别
    • 三单匹配
      • 三单匹配-同步接口
        POST
      • 三单匹配-异步匹配任务提交
        POST
      • 三单匹配-异步匹配结果查询
        POST
      • 三单匹配-异步数据入库
        POST
      • 三单匹配-异步数据入库结果查询
        POST
      • 三单匹配-异步标注数据导入
        POST
      • 三单匹配-异步标注数据导入结果查询
        POST
      • 三单匹配-异步训练接口
        POST
      • 三单匹配-异步训练结果查询
        POST
      • 三单匹配-异步模型一键部署接口
        POST
      • 三单匹配-异步模型一键部署查询接口
        POST
    • 统一反馈
      • 三单匹配反馈详细说明
      • 算法服务统一反馈接口
    • 文档分类(区分发票、附件)
      POST
    • 智能赋码税收分类编码识别
      POST
  • 文档中心
    • 外部文件上传接口
      POST
  • 国际发票
  • 数据模型
    • 示例数据模型
      • Pet
      • Category
      • Tag
  1. 三单匹配

三单匹配-异步匹配任务提交

开发中
POST
/ai/knowledge/nlpService/item/match/push

一、接口描述#

解决发票和单据(比如入库单)匹配问题,输入发票信息和候选单据信息,输出发票每条明细匹配的单据明细
1.
支持一张发票匹配多张单据;
2.
仅支持一条发票明细匹配多条入库单单据明细,也支持一条入库单单据明细匹配多条发票明细的情况;
3.
发票或入库单的金额、单价、数量字段若无值,应保持为空,不得转化为0;
4.
【v1新增】反馈机制支持:接口支持反馈机制,调用时会保存任务输入、匹配结果和taskId到数据库,业务系统需保存返回的taskId用于后续反馈。
5.
【v1新增】数据保留策略:
超过1个月未收到反馈的任务,将自动删除任务数据
超过10天删除冗余中间数据

二、输入参数#

【v1 新增】1. clientId(string):客户ID,用于多租户隔离。必填字段。
【v1 新增】2. supplierId(string):供应商ID。必填字段,单次任务仅涉及一个供应商。
【v1 新增】3. enableFeedback(bool):是否启用反馈机制。选填字段,默认 false。
【v1 新增】4. useVectorStore(bool):是否使用向量库,默认为 false,主要用于兼容改造前的接口,业务方改造完成后,该字段会去掉。
【v1 新增】4. requestScene(string):请求场景标识。normal 代表正常使用场景(高优),init 代表初始化场景(低优)。不传默认按 normal 处理。
6. targetUrl: 发票明细文件(CSV 格式,UTF-8 编码, 明细数量不能超过5000条)的url地址。文件格式如下:
文件中的每一行表示一条发票明细记录,字段说明如下:
【v1 新增字段】doc_id(string):发票的唯一标识。必填字段(⚠️ 【重要】同一张发票的 doc_id 必须始终一致,不能因为换了任务就改变。)
item_id(string):发票明细的唯一标识。每条记录必须提供该字段,且不能重复。(⚠️ 【新增要求】同一条明细的 item_id 必须始终一致,不能因为换了任务就改变。)
product_name(string):商品名称。必填字段
specification_model(string):规格型号,可为空。
unit(string):单位,可为空。
quantity(float):数量,可为空(根据匹配模式决定是否必填)。
unit_price(float):单价,可为空。
amount(float):不含税金额,可为空(根据匹配模式决定是否必填)。
【v2 新增字段】business_time(string):业务时间,格式 yyyy-mm-dd(如 2024-03-15),可为空。
【v2 新增字段】tax_rate(float):税率,小数表示(如 0.13 表示 13%),可为空。
⚠️ 字段要求说明(根据匹配模式 matchMode 而定):
当 matchMode = "0"(金额优先匹配)时,必须填写 amount 字段。
当 matchMode = "1"(数量优先匹配)时,必须填写 quantity 字段。
当 matchMode = "2"(金额和数量同时匹配)时, 必须填写amount 和 quantity 字段。
当 matchMode = "3"(金额或数量自适应匹配)时, amount 和 quantity 字段 至少填写一项。【v2 新增匹配模式】
📌 注意:若缺失任何必填字段(如 doc_id、item_id、product_name,或匹配模式要求的 amount / quantity),系统将直接报错,无法继续处理。因此请确保所有必填字段完整且符合格式要求。
7. candidateUrl: 候选单据明细文件(CSV 格式,UTF-8 编码)的url地址。文件格式如下:
每一行表示一张单据中的一条明细记录,字段说明如下:
item_id(string):单据明细的唯一标识。必填且不可重复,通常建议格式为 {单据单号}_{单据行号},例如 {入库单号}_{入库单行号}。(⚠️ 【v1 新增要求】同一条明细的 item_id 必须始终一致,不能因为换了任务就改变。)
doc_id(string):该明细所属单据的唯一标识(即单据单号)。必填字段(⚠️ 【重要】同一张入库单的 doc_id 必须始终一致,不能因为换了任务就改变。)
product_code(string):商品/物料编码,商品的唯一标识。(根据初始化配置决定是否必填)
product_name(string):商品名称 / 物料名称 / 描述。必填字段
specification_model(string):规格型号,可为空。
unit(string):单位,可为空。
quantity(float):数量(接收数量 / 入库数量),可为空(根据匹配模式决定是否必填)。
unit_price(float):单价,可为空。
amount(float):明细金额,可为空(根据匹配模式决定是否必填)。
【v2 新增字段】business_time(string):业务时间,格式 yyyy-mm-dd(如 2024-03-15),priorityStrategy="FIFO" 时必填,其余场景可为空。
【v2 新增字段】tax_rate(float):税率,小数表示(如 0.13 表示 13%),可为空。
⚠️ 字段要求说明(根据匹配模式 matchMode 而定):
当 matchMode = "0"(金额优先匹配)时,必须填写 amount 字段。
当 matchMode = "1"(数量优先匹配)时,必须填写 quantity 字段。
当 matchMode = "2"(金额和数量同时匹配)时,必须同时填写 amount 和 quantity 字段。
当 matchMode = "3"(金额或数量自适应匹配)时, amount 和 quantity 字段 字段至少有一项。【v2 新增匹配模式】
📌 注意:若某条明细缺失必填字段(如 item_id、doc_id、product_name,或匹配模式要求的 amount / quantity),系统将自动过滤该条记录,不参与后续匹配。
8. settings: 动态配置项, 此动态配置项通过传入 字典 的方式来配置不同的容差参数和匹配模式,后续新增配置可以直接在该参数中新增。所有配置项为选填项,用户可以选择传入或不传入。如果没有传入配置项,则会使用默认值。以下是每个配置项的详细说明和要求:
配置项说明:
所有配置项均为选填项,可以选择传入也可以不传入。
如果不传入某些配置项,则会使用以下默认值:
matchMode 默认为 "0"(基于金额匹配)。
配置项具体描述
priceTolerance(单价容差)
类型: float
描述: 单价容差的值,表示允许的单价差异。
要求: 可选,若传入则必须和 priceToleranceType 一同传入,并且 priceTolerance 的值为非负数。
priceToleranceType(单价容差类型)
类型: string ("0" 或 "1")
描述: 单价容差的类型。
要求: 可选,若传入则必须和 priceTolerance 一同传入。并且值必须为:
"0": 容差以百分比表示。
"1": 容差以绝对值表示。
quantityTolerance(数量容差)
类型: float
描述: 数量容差的值,表示允许的数量差异。
要求: 可选,若传入则必须和 quantityToleranceType 一同传入,并且 quantityTolerance 的值为非负数。
quantityToleranceType(数量容差类型)
类型: string ("0" 或 "1")
描述: 数量容差的类型。
要求: 可选,若传入则必须和 quantityTolerance 一同传入,并且值必须为:
"0": 容差以百分比表示。
"1": 容差以绝对值表示。
amountTolerance(金额容差)
类型: float
描述: 金额容差的值,表示允许的金额差异。如果为 null,则金额容差将根据 priceTolerance 和 quantityTolerance 动态计算。
要求: 可选,若传入则必须和 amountToleranceType 一同传入,并且值为非负数。
amountToleranceType(金额容差类型)
类型: string ("0" 或 "1")
描述: 金额容差的类型。
要求: 可选,若传入则必须和 amountTolerance 一同传入,并且值必须为:
"0": 容差以百分比表示。
"1": 容差以绝对值表示。
matchMode(匹配模式)
类型: string ("0", "1", "2", "3")
描述: 匹配时使用的策略。
要求: 可选,若传入则会覆盖默认值:
如果传入 matchMode,则必须为:
"0": 仅使用金额进行匹配。
"1": 仅使用数量进行匹配。
"2": 同时使用数量和金额进行匹配。
【v2 新增】"3": 按金额或数量(按行自适应)进行匹配。
默认为 "0"。
【v2 新增】matchRelation(匹配关系)
类型: string ("ONE_TO_MANY", "MANY_TO_MANY")
描述: 控制允许的发票明细与入库单明细之间的匹配拓扑。
要求: 可选,若传入则会覆盖默认值:
如果传入 matchRelation,则必须为:
"ONE_TO_MANY": 支持的匹配关系包含 一对一、一对多。表明一条入库单明细只能被一条发票明细核销,不允许多条发票明细共享同一条入库单明细
"MANY_TO_MANY": 支持的匹配关系包含 一对一、一对多、多对一、多对多。表明允许多条发票明细共享入库单明细。
默认为 "ONE_TO_MANY"。
【v2 新增】returnMode(返回模式)
类型: string ("WHOLE", "PARTIAL")
描述: 控制返回的模式。
要求: 可选,若传入则会覆盖默认值:
如果传入 returnMode,则必须为:
"WHOLE": 整张发票所有明细都匹配成功才返回结果;任何一条明细未匹配,整张发票退回,返回空结果。
"PARTIAL": 匹配到几行返回几行,matchDetails 中只包含匹配成功的明细,未匹配的明细不返回。
默认为 "WHOLE"。
【v2 新增】priorityStrategy(候选选择优先级策略)
类型: string ("DEFAULT", "FIFO")
描述: 当多个候选方案都满足匹配条件时,基于优先级策略控制优先选择哪个。
要求: 可选,若传入则会覆盖默认值:
如果传入 priorityStrategy,则必须为:
"DEFAULT": 综合最优。
"FIFO": 先进先出。
默认为 "DEFAULT"。
【v2 新增】allowSignMismatch(是否允许跨正负号匹配)
类型: bool
描述: 是否允许一对多/多对一/多对多场景中,多条明细正负混合汇总后与单条或多条明细匹配。false 要求符号统一,true 允许正负相抵后净值匹配。
要求: 可选,若传入则会覆盖默认值;
默认为 fasle。
【v2 新增】unitMode(单位处理模式)
类型: string ("FLEXIBLE", "EXACT")
描述: 控制发票明细与入库单明细单位不一致时的处理方式。单位取自两侧文件的 unit 列(可选列)。
要求: 可选,若传入则会覆盖默认值:
如果传入 unitMode,则必须为:
"EXACT": 只有单位完全相同的明细(换算比例 1:1)才可能匹配,单位不同一律不匹配。
"FLEXIBLE": 单位不同的明细也可能匹配,服务会自动按商品的单位换算关系折算数量后再比对。
默认为 "FLEXIBLE"。

三、主要输出参数#

1.data: 输出异步任务id。可以根据这个id在查询接口查询结果。

四、FAQ#

1.
matchMode "2" 与 "3" 的区别 ?
两者都会在数量和金额齐全时做双维校验,区别在于数据不齐全时的处理方式:
"2" 数量+金额"3" 金额或数量(按行自适应)
列存在性要求quantity 和 amount 两列都必须存在两列至少存在一列
某行只有一维有值返回参数错误,请求失败该行按存在的那一维校验,继续匹配
某行两维都为空返回参数错误,请求失败返回参数错误,请求失败
校验维度恒定双维逐行自适应
"3" 的逐行规则:
该行数量和金额都有值 → 两个条件都要满足(等同 "2");
该行只有金额 → 只校验金额(等同 "0");
该行只有数量 → 只校验数量(等同 "1")。
发票明细降级后,候选侧缺少对应维度的入库单明细不会进入该行的候选集。例如某发票明细降级为仅数量校验,则没有 quantity 值的入库单明细不会成为它的候选。
示例:发票 3 行明细——第 1 行数量 10、金额 1000;第 2 行仅金额 500(数量为空);第 3 行仅数量 20(金额为空)。
matchMode="2":第 2、3 行缺维度,直接返回参数错误,整个请求失败;
matchMode="3":第 1 行按数量+金额校验,第 2 行按金额校验,第 3 行按数量校验,三行均正常参与匹配。

请求参数

Query 参数

Header 参数

Body 参数application/json

示例
{
    "clientId": "string",
    "supplierId": "string",
    "enableFeedback": true,
    "useVectorStore": true,
    "requestScene": "string",
    "targetUrl": "string",
    "candidateUrl": "string",
    "settings": {
        "priceTolerance": 0,
        "priceToleranceType": "string",
        "quantityTolerance": 0,
        "quantityToleranceType": "string",
        "amountTolerance": 0,
        "amountToleranceType": "string",
        "matchMode": "string",
        "matchRelation": "string",
        "returnMode": "string",
        "priorityStrategy": "string",
        "unitMode": "string",
        "allowSignMismatch": true
    }
}

请求示例代码

Shell
JavaScript
Java
Swift
Go
PHP
Python
HTTP
C
C#
Objective-C
Ruby
OCaml
Dart
R
请求示例请求示例
Shell
JavaScript
Java
Swift
curl --location --globoff '/ai/knowledge/nlpService/item/match/push?access_token={{access_token}}' \
--header 'client-platform: common' \
--header 'Content-Type: application/json' \
--data '{
    "clientId": "string",
    "supplierId": "string",
    "enableFeedback": true,
    "useVectorStore": true,
    "requestScene": "string",
    "targetUrl": "string",
    "candidateUrl": "string",
    "settings": {
        "priceTolerance": 0,
        "priceToleranceType": "string",
        "quantityTolerance": 0,
        "quantityToleranceType": "string",
        "amountTolerance": 0,
        "amountToleranceType": "string",
        "matchMode": "string",
        "matchRelation": "string",
        "returnMode": "string",
        "priorityStrategy": "string",
        "unitMode": "string",
        "allowSignMismatch": true
    }
}'

返回响应

🟢200成功
application/json
Bodyapplication/json

示例
{
    "errcode": "0000",
    "description": "Success",
    "data": {
        "taskId": "8a99a18a3ca66a8fb332c66130b09f44"
    },
    "traceId": "f83d76a391634567853ebe1105a26adf"
}
修改于 2026-08-04 03:23:55
上一页
三单匹配-同步接口
下一页
三单匹配-异步匹配结果查询
Built with