跳转到主要内容
本文以采购合同审核为业务场景,演示如何通过 API 完成从创建空间、配置类别、上传合同文件、获取抽取结果到智能审核的完整流程。 如果您刚刚接触 DocFlow,建议先在 Web 页面 体验一下产品的基本功能,再阅读本文。

01 场景说明

在企业合同管理业务中,法务部门需要对每一份合同进行系统性审核,主要关注以下三个维度:
  • 财务条款审核:金额计算与大小写一致性、税率合规性、付款条件与比例明确性、违约金/滞纳金合理性等。
  • 法务合规审核:必备条款完整性、签约主体信息一致性、权力义务明确性、知识产权归属等。
  • 文本质量审核:数字计算校验、跨条款逻辑一致性、错别字与语义歧义检测等。
通过 DocFlow,您只需将合同文件(PDF 或 Word)上传到工作空间,系统即可自动完成结构化字段抽取,并依据预设规则库进行全面智能审核,显著降低人工逐条审阅的时间成本。
合同审核场景只需配置一个文件类别(采购合同),但规则较多(3 个规则组、22 条规则),覆盖合同审核的常见风险点。

02 业务流程

合同审核业务流程
工作空间、文件类别和审核规则库只需配置一次,后续可持续复用——直接上传新的合同文件并创建新的审核任务即可。本示例为演示完整流程,将配置步骤和处理步骤放在同一段代码中运行。

03 先决条件

  1. 登录 TextIn 控制台,获取 x-ti-app-idx-ti-secret-code
  2. 下载示例样本文件,或使用自己的采购合同文件

04 类别与字段配置

本示例只配置一个文件类别:采购合同。合同是复杂的长文档,字段较多,建议使用 Model 2(复杂文档理解) 以获得更准确的抽取效果。

采购合同(样本:sample_contract.docx)

采购合同包含主体信息、标的条款、财务条款、法务条款等多个维度的字段,全部为基本信息字段
示例样本文件(Word 文档),可点击下载查看
字段名类型
合同编号基本信息字段
合同名称基本信息字段
签订日期基本信息字段
生效条件基本信息字段
甲方全称基本信息字段
甲方统一社会信用代码基本信息字段
甲方联系方式基本信息字段
甲方地址基本信息字段
乙方全称基本信息字段
乙方统一社会信用代码基本信息字段
乙方联系方式基本信息字段
乙方地址基本信息字段
乙方法定代表人/授权委托人基本信息字段
标的名称基本信息字段
标的规格型号/标准基本信息字段
标的技术/质量标准基本信息字段
标的数量/服务范围基本信息字段
含税总金额(大写)基本信息字段
不含税金额基本信息字段
税额基本信息字段
税率基本信息字段
发票条款基本信息字段
付款方式基本信息字段
付款条件基本信息字段
付款比例基本信息字段
账期基本信息字段
收款账户信息基本信息字段
履约期限基本信息字段
履约地点基本信息字段
交付/验收标准与流程基本信息字段
违约责任基本信息字段
免责条款基本信息字段
争议解决方式基本信息字段
合同解除与终止条件基本信息字段
保密条款基本信息字段
知识产权声明基本信息字段
合同份数基本信息字段
附件清单基本信息字段
签约人签字/盖章基本信息字段

05 审核规则配置

本示例的审核规则库包含 3 个规则组、22 条审核规则,全面覆盖合同审核的常见风险:

规则组 1:财务条款审核(12 条规则)

规则名称风险等级审核逻辑
连带责任条款🟡 中风险若存在三方关系(开票方/付款方/签约主体不一致),合同须明确各方债权债务关系
履约保证金条款🟡 中风险若约定保证金/质保金,须明确退还条件、时间节点及不予退还的情形
滞纳金/违约金合理性🟡 中风险逾期付款或逾期交付的违约金日费率 ≤ 0.05%
验收/交付标准明确性🟡 中风险合同须明确交付完成的判定标准
币别一致性🟡 中风险合同全文涉及金额的币别须前后一致
付款方式明确性🟡 中风险付款方式须为银行转账、承兑汇票或第三方支付之一
付款条件明确性🟡 中风险付款节点和期限须明确
税率合理性🔴 高风险税率须为有效值(6%/9%/13%/1%/3%/免税/0%)且与合同标的类型匹配
付款比例合计🔴 高风险分阶段付款比例合计须等于 100%
产品明细合计与总金额一致性🔴 高风险各明细行单价×数量=金额,所有明细行金额合计=合同总金额(允许±0.01元)
金额合规检测🔴 高风险不含税金额×税率=税额;不含税金额+税额=含税总金额(允许±0.01元尾差)
合同金额大小写一致性🔴 高风险大小写金额须一致;仅有大写时校验中文金额书写规范

规则组 2:法务合规审核(9 条规则)

规则名称风险等级审核逻辑
不可抗力条款🟢 低风险须包含不可抗力条款且定义清晰(范围、通知时限、责任豁免方式)
保密条款完整性🟢 低风险保密信息定义、保密期限、违约责任三要素齐全
知识产权归属🟢 低风险涉及技术开发/软件开发时,须有明确的知识产权归属条款
违约金上限合理性🟢 低风险违约金须设置上限(如不超过合同总金额的 20%)
违约对等性检查🟢 低风险甲乙双方逾期违约金比例差异不超过设定阈值(如 ≥50% 时标记)
合同日期合理性🟡 中风险签订日期 ≤ 生效日期 ≤ 到期日期;生效日期不得早于当前日期
签约主体名称一致性🔴 高风险合同首部、尾部签章处、正文中的签约主体名称须完全一致
签约主体信息完整性🔴 高风险甲乙双方的名称、地址、联系方式均不为空
必备条款完整性🔴 高风险须包含主体信息、标的、数量、价款、履行期限、违约责任、争议解决等必备条款

规则组 3:文本质量与一致性审核(3 条规则)

规则名称风险等级审核逻辑
数字计算校验🟢 低风险单价×数量=金额(每行);各分项金额合计=合同总金额
内部一致性检测🟡 中风险跨条款逻辑无矛盾:付款条件与交付条款不冲突、金额前后一致、期限起止合理
错别字/语义错误检测🟢 低风险检测错别字、用词不当、语义歧义

06 代码结构说明

示例代码将完整的七步流程放在一起运行。在实际生产中,步骤 1、2、5 只需执行一次;后续审核新合同时,只需重复步骤 3、4、6、7,直接复用已有配置即可。参见 合同审核场景(已完成配置) 示例代码中的函数分为两类,理解这一点有助于对照 API 文档进行调试和扩展。

两类函数

REST API 调用函数 — 每个函数直接封装一个 API 端点,函数参数与接口文档一一对应:
函数(Python)方法(Java)对应 API 端点说明
create_workspacecreateWorkspacePOST /workspace/create创建工作空间,返回 workspace_id
create_categorycreateCategoryPOST /category/create创建文件类别并上传样本,返回 category_id
upload_fileuploadFilePOST /file/upload上传待处理文件,返回 batch_number
create_rule_repocreateRuleRepoPOST /review/rule_repo/create创建审核规则库,返回 repo_id
create_rule_groupcreateRuleGroupPOST /review/rule_group/create在规则库内创建规则组,返回 group_id
create_rulecreateRulePOST /review/rule/create在规则组内创建审核规则,绑定适用分类
submit_review_tasksubmitReviewTaskPOST /review/task/submit提交审核任务,返回审核 task_id
工具辅助函数 — 不直接对应 API 端点,提供公共基础能力或封装轮询/展示逻辑:
函数(Python)方法(Java)作用
_headersauthHeaders构造鉴权请求头
_checkcheckResponse校验响应 code,统一异常处理
_mimemimeType根据扩展名推断 MIME 类型
wait_for_resultwaitForResult循环轮询 file/fetch,等待抽取完成
display_resultdisplayResult格式化打印抽取结果
wait_for_reviewwaitForReview循环轮询 review/task/result,等待审核完成
display_review_resultdisplayReviewResult格式化打印审核结果

逐步代码说明

步骤 2:创建采购合同类别

合同字段较多,直接在 create_categoryfields 参数中一次性传入所有字段,无需额外调用 add_category_field
contract_id = create_category(
    workspace_id=workspace_id,
    name="采购合同",
    sample_file_path=os.path.join(SAMPLE_DIR, "sample_contract.docx"),
    fields=[
        {"name": "合同编号"}, {"name": "合同名称"}, {"name": "签订日期"},
        {"name": "甲方全称"}, {"name": "乙方全称"},
        # ... 其余字段
    ],
)

步骤 4:获取合同抽取结果

合同文档较长,处理时间可能比普通票据更长(建议超时时间设为 180s)。结果中的 fields 数组包含所有抽取到的字段和值。
# 超时时间设为 180s(合同文档较长)
file_result = wait_for_result(workspace_id, batch_number, timeout=180)
display_result(file_result)

抽取结果示例

抽取结果示例

审核结果示例

审核结果示例

07 完整示例代码下载

完整可运行代码(含 Python、Java 两个版本)已内置在文档仓库的 examples/ 目录下:
examples/
├── python/
│   ├── contract_review.py         # Python 完整示例
│   ├── requirements.txt
│   └── README.md
├── java/
│   ├── src/main/java/com/docflow/ContractReview.java
│   ├── pom.xml
│   └── README.md
└── sample_files/
    └── contract_review/
        └── sample_contract.docx

Python 示例

查看 Python 完整示例代码

Java 示例

查看 Java 完整示例代码

08 运行示例

环境要求:Python 3.8+1. 安装依赖
cd examples/python
pip install -r requirements.txt
2. 填写配置打开 contract_review.py,填写文件顶部的配置项:
APP_ID        = "your-app-id"      # x-ti-app-id
SECRET_CODE   = "your-secret-code" # x-ti-secret-code
3. 运行
python contract_review.py
运行成功后,可登录 DocFlow Web 页面,在对应工作空间下直观查看合同的字段抽取结果和智能审核结果,便于与代码输出对照验证。

预期控制台输出

成功运行后,控制台将输出如下内容(workspace_id、category_id 等 ID 因运行环境不同而变化):
============================================================
  DocFlow 合同审核场景示例
============================================================
[步骤1] 工作空间创建成功  workspace_id=<workspace_id>
[步骤2] 文件类别创建成功  name=采购合同  category_id=<category_id>

配置完成  workspace_id=<workspace_id>
  采购合同: category_id=<category_id>

开始上传待处理文件...
[步骤3] 文件上传成功  name=sample_contract.docx  batch_number=<batch_number>

开始获取处理结果...
[步骤4] 等待处理结果(batch_number=<batch_number>)......... 完成

============================================================
文件名   : sample_contract.docx
分类结果 : 采购合同

── 普通字段 ──────────────────────────
  合同编号                : HT-2025-001
  合同名称                : 智能硬件设备采购合同
  签订日期                : 2025-01-10
  甲方全称                : 合合信息科技(上海)有限公司
  乙方全称                : 上海某某科技有限公司
  合同金额                : 50,900.00
  税率                   : 6%
  乙方税号                : 91310000XXXXXXXXXX
  支付条款                : 验收合格后 30 日内付款
  违约金条款               : 延迟交货每日按合同总价 0.1% 计算违约金
  ...(共 22 个字段)

开始配置审核规则库...
[步骤5] 规则库创建成功  name=合同审核场景规则库  repo_id=<repo_id>
  规则组创建成功  name=基本条款完整性  group_id=<group_id>
    规则创建成功  name=必填条款完整性校验  rule_id=<rule_id>
    规则创建成功  name=合同金额与税率合规  rule_id=<rule_id>
    规则创建成功  name=双方主体信息完整  rule_id=<rule_id>
    规则创建成功  name=签订日期有效性  rule_id=<rule_id>
  规则组创建成功  name=财务条款合规性  group_id=<group_id>
    规则创建成功  name=付款条款明确性  rule_id=<rule_id>
    规则创建成功  name=发票信息完整性  rule_id=<rule_id>
    规则创建成功  name=税率合规性  rule_id=<rule_id>
  规则组创建成功  name=法务条款审核  group_id=<group_id>
    规则创建成功  name=违约金条款存在性  rule_id=<rule_id>
    规则创建成功  name=争议解决条款完整性  rule_id=<rule_id>
    规则创建成功  name=不可抗力条款存在性  rule_id=<rule_id>
[步骤6] 审核任务提交成功  task_id=<task_id>
[步骤7] 等待审核结果(task_id=<task_id>)................... 完成

============================================================
审核任务状态  : 审核通过
规则通过数    : 11
规则不通过数  : 0

── 规则组:基本条款完整性 ───────────────────
  ✓ [高风险] 必填条款完整性校验: 审核通过
    依据: 合同编号、甲乙方全称、签订日期、合同金额等必填条款均已填写。
  ✓ [高风险] 合同金额与税率合规: 审核通过
    依据: 合同金额 50,900.00 元,税率 6%,符合增值税一般纳税人要求。
  ✓ [中风险] 双方主体信息完整: 审核通过
    依据: 甲方"合合信息科技(上海)有限公司"与乙方"上海某某科技有限公司"信息完整。
  ✓ [中风险] 签订日期有效性: 审核通过
    依据: 签订日期 2025-01-10 格式有效且不晚于当前日期。

── 规则组:财务条款合规性 ───────────────────
  ✓ [高风险] 付款条款明确性: 审核通过
    依据: 支付条款明确规定"验收合格后 30 日内付款",条款清晰。
  ✓ [中风险] 发票信息完整性: 审核通过
    依据: 开票信息完整,包含税号、开票地址等必要内容。
  ✓ [高风险] 税率合规性: 审核通过
    依据: 合同约定税率 6%,符合现行增值税税率规定。

── 规则组:法务条款审核 ───────────────────
  ✓ [高风险] 违约金条款存在性: 审核通过
    依据: 合同包含明确的违约金条款,按延迟每日 0.1% 计算。
  ✓ [中风险] 争议解决条款完整性: 审核通过
    依据: 合同约定争议解决方式,条款完整。
  ✓ [中风险] 不可抗力条款存在性: 审核通过
    依据: 合同包含不可抗力条款,明确了不可抗力事件的处理方式。

============================================================
  示例运行完成
============================================================

09 结果说明

抽取结果

处理完成后,合同文件将返回分类结果和字段抽取结果。字段抽取结果位于 data.fields[],每个字段包含 keyvalue 及坐标 position(可用于原文高亮回显)。合同场景使用 Model 2(复杂文档理解),对长文档的深度理解和字段抽取效果更优。 以下为采购合同样本文件的实际接口返回(来自 file/fetch,省略了部分 position 坐标):

sample_contract.docx

{
  "id": "2029124607672344576",
  "name": "sample_contract.docx",
  "format": "docx",
  "category": "采购合同",
  "recognition_status": 1,
  "duration_ms": 12438,
  "data": {
    "fields": [
      { "key": "合同编号",   "value": "HT-2025-001" },
      { "key": "合同名称",   "value": "智能硬件设备采购合同" },
      { "key": "签订日期",   "value": "2025-01-10" },
      { "key": "甲方全称",   "value": "合合信息科技(上海)有限公司" },
      { "key": "乙方全称",   "value": "上海某某科技有限公司" },
      { "key": "合同金额",   "value": "50900.00" },
      { "key": "税率",      "value": "6%" },
      { "key": "乙方税号",   "value": "91310000XXXXXXXXXX" },
      { "key": "支付条款",   "value": "验收合格后 30 日内付款" },
      { "key": "违约金条款", "value": "延迟交货每日按合同总价 0.1% 计算违约金" },
      { "key": "合作期间",   "value": "2025-01-10 至 2025-12-31" }
    ],
    "stamps": [],
    "handwritings": []
  }
}

审核结果

审核完成后,可从 review/task/result 接口获取以下信息:
  • status:任务整体状态(1=审核通过,4=审核不通过,2=审核失败)
  • statistics:规则通过数、不通过数汇总
  • groups[].review_tasks[]:每条规则的详细审核结果,包含:
    • review_result:该规则的审核结论(1=通过,4=不通过)
    • reasoning:AI 给出的审核依据说明
    • anchors:依据在原文中的坐标位置(可用于高亮回显)
{
  "task_id": "31415926",
  "task_name": "合同审核_20250110_143022",
  "status": 1,
  "statistics": { "pass_count": 11, "failure_count": 0, "error_count": 0 },
  "groups": [
    {
      "group_name": "基本条款完整性",
      "review_tasks": [
        {
          "rule_name": "必填条款完整性校验",
          "risk_level": 10,
          "review_result": 1,
          "reasoning": "合同编号、甲乙方全称、签订日期、合同金额等必填条款均已填写,审核通过。"
        },
        {
          "rule_name": "合同金额与税率合规",
          "risk_level": 10,
          "review_result": 1,
          "reasoning": "合同金额 50900.00 元,税率 6%,符合增值税一般纳税人要求,审核通过。"
        }
      ]
    },
    {
      "group_name": "财务条款合规性",
      "review_tasks": [
        {
          "rule_name": "付款条款明确性",
          "risk_level": 10,
          "review_result": 1,
          "reasoning": "支付条款明确规定"验收合格后 30 日内付款",条款清晰,审核通过。"
        },
        {
          "rule_name": "税率合规性",
          "risk_level": 10,
          "review_result": 1,
          "reasoning": "合同约定税率 6%,符合现行增值税税率规定,审核通过。"
        }
      ]
    },
    {
      "group_name": "法务条款审核",
      "review_tasks": [
        {
          "rule_name": "违约金条款存在性",
          "risk_level": 10,
          "review_result": 1,
          "reasoning": "合同包含明确的违约金条款,按延迟每日 0.1% 计算,审核通过。"
        }
      ]
    }
  ]
}