01 场景说明
在企业合同管理业务中,法务部门需要对每一份合同进行系统性审核,主要关注以下三个维度:- 财务条款审核:金额计算与大小写一致性、税率合规性、付款条件与比例明确性、违约金/滞纳金合理性等。
- 法务合规审核:必备条款完整性、签约主体信息一致性、权力义务明确性、知识产权归属等。
- 文本质量审核:数字计算校验、跨条款逻辑一致性、错别字与语义歧义检测等。
合同审核场景只需配置一个文件类别(采购合同),但规则较多(3 个规则组、22 条规则),覆盖合同审核的常见风险点。
02 业务流程

工作空间、文件类别和审核规则库只需配置一次,后续可持续复用——直接上传新的合同文件并创建新的审核任务即可。本示例为演示完整流程,将配置步骤和处理步骤放在同一段代码中运行。
03 先决条件
- 登录 TextIn 控制台,获取
x-ti-app-id和x-ti-secret-code - 下载示例样本文件,或使用自己的采购合同文件
04 类别与字段配置
本示例只配置一个文件类别:采购合同。合同是复杂的长文档,字段较多,建议使用 Model 2(复杂文档理解) 以获得更准确的抽取效果。采购合同(样本:sample_contract.docx)
采购合同(样本:sample_contract.docx)
采购合同包含主体信息、标的条款、财务条款、法务条款等多个维度的字段,全部为基本信息字段:
| 字段名 | 类型 |
|---|---|
| 合同编号 | 基本信息字段 |
| 合同名称 | 基本信息字段 |
| 签订日期 | 基本信息字段 |
| 生效条件 | 基本信息字段 |
| 甲方全称 | 基本信息字段 |
| 甲方统一社会信用代码 | 基本信息字段 |
| 甲方联系方式 | 基本信息字段 |
| 甲方地址 | 基本信息字段 |
| 乙方全称 | 基本信息字段 |
| 乙方统一社会信用代码 | 基本信息字段 |
| 乙方联系方式 | 基本信息字段 |
| 乙方地址 | 基本信息字段 |
| 乙方法定代表人/授权委托人 | 基本信息字段 |
| 标的名称 | 基本信息字段 |
| 标的规格型号/标准 | 基本信息字段 |
| 标的技术/质量标准 | 基本信息字段 |
| 标的数量/服务范围 | 基本信息字段 |
| 含税总金额(大写) | 基本信息字段 |
| 不含税金额 | 基本信息字段 |
| 税额 | 基本信息字段 |
| 税率 | 基本信息字段 |
| 发票条款 | 基本信息字段 |
| 付款方式 | 基本信息字段 |
| 付款条件 | 基本信息字段 |
| 付款比例 | 基本信息字段 |
| 账期 | 基本信息字段 |
| 收款账户信息 | 基本信息字段 |
| 履约期限 | 基本信息字段 |
| 履约地点 | 基本信息字段 |
| 交付/验收标准与流程 | 基本信息字段 |
| 违约责任 | 基本信息字段 |
| 免责条款 | 基本信息字段 |
| 争议解决方式 | 基本信息字段 |
| 合同解除与终止条件 | 基本信息字段 |
| 保密条款 | 基本信息字段 |
| 知识产权声明 | 基本信息字段 |
| 合同份数 | 基本信息字段 |
| 附件清单 | 基本信息字段 |
| 签约人签字/盖章 | 基本信息字段 |
05 审核规则配置
本示例的审核规则库包含 3 个规则组、22 条审核规则,全面覆盖合同审核的常见风险:规则组 1:财务条款审核(12 条规则)
规则组 1:财务条款审核(12 条规则)
| 规则名称 | 风险等级 | 审核逻辑 |
|---|---|---|
| 连带责任条款 | 🟡 中风险 | 若存在三方关系(开票方/付款方/签约主体不一致),合同须明确各方债权债务关系 |
| 履约保证金条款 | 🟡 中风险 | 若约定保证金/质保金,须明确退还条件、时间节点及不予退还的情形 |
| 滞纳金/违约金合理性 | 🟡 中风险 | 逾期付款或逾期交付的违约金日费率 ≤ 0.05% |
| 验收/交付标准明确性 | 🟡 中风险 | 合同须明确交付完成的判定标准 |
| 币别一致性 | 🟡 中风险 | 合同全文涉及金额的币别须前后一致 |
| 付款方式明确性 | 🟡 中风险 | 付款方式须为银行转账、承兑汇票或第三方支付之一 |
| 付款条件明确性 | 🟡 中风险 | 付款节点和期限须明确 |
| 税率合理性 | 🔴 高风险 | 税率须为有效值(6%/9%/13%/1%/3%/免税/0%)且与合同标的类型匹配 |
| 付款比例合计 | 🔴 高风险 | 分阶段付款比例合计须等于 100% |
| 产品明细合计与总金额一致性 | 🔴 高风险 | 各明细行单价×数量=金额,所有明细行金额合计=合同总金额(允许±0.01元) |
| 金额合规检测 | 🔴 高风险 | 不含税金额×税率=税额;不含税金额+税额=含税总金额(允许±0.01元尾差) |
| 合同金额大小写一致性 | 🔴 高风险 | 大小写金额须一致;仅有大写时校验中文金额书写规范 |
规则组 2:法务合规审核(9 条规则)
规则组 2:法务合规审核(9 条规则)
| 规则名称 | 风险等级 | 审核逻辑 |
|---|---|---|
| 不可抗力条款 | 🟢 低风险 | 须包含不可抗力条款且定义清晰(范围、通知时限、责任豁免方式) |
| 保密条款完整性 | 🟢 低风险 | 保密信息定义、保密期限、违约责任三要素齐全 |
| 知识产权归属 | 🟢 低风险 | 涉及技术开发/软件开发时,须有明确的知识产权归属条款 |
| 违约金上限合理性 | 🟢 低风险 | 违约金须设置上限(如不超过合同总金额的 20%) |
| 违约对等性检查 | 🟢 低风险 | 甲乙双方逾期违约金比例差异不超过设定阈值(如 ≥50% 时标记) |
| 合同日期合理性 | 🟡 中风险 | 签订日期 ≤ 生效日期 ≤ 到期日期;生效日期不得早于当前日期 |
| 签约主体名称一致性 | 🔴 高风险 | 合同首部、尾部签章处、正文中的签约主体名称须完全一致 |
| 签约主体信息完整性 | 🔴 高风险 | 甲乙双方的名称、地址、联系方式均不为空 |
| 必备条款完整性 | 🔴 高风险 | 须包含主体信息、标的、数量、价款、履行期限、违约责任、争议解决等必备条款 |
规则组 3:文本质量与一致性审核(3 条规则)
规则组 3:文本质量与一致性审核(3 条规则)
| 规则名称 | 风险等级 | 审核逻辑 |
|---|---|---|
| 数字计算校验 | 🟢 低风险 | 单价×数量=金额(每行);各分项金额合计=合同总金额 |
| 内部一致性检测 | 🟡 中风险 | 跨条款逻辑无矛盾:付款条件与交付条款不冲突、金额前后一致、期限起止合理 |
| 错别字/语义错误检测 | 🟢 低风险 | 检测错别字、用词不当、语义歧义 |
06 代码结构说明
示例代码将完整的七步流程放在一起运行。在实际生产中,步骤 1、2、5 只需执行一次;后续审核新合同时,只需重复步骤 3、4、6、7,直接复用已有配置即可。参见 合同审核场景(已完成配置)。 示例代码中的函数分为两类,理解这一点有助于对照 API 文档进行调试和扩展。两类函数
REST API 调用函数 — 每个函数直接封装一个 API 端点,函数参数与接口文档一一对应:| 函数(Python) | 方法(Java) | 对应 API 端点 | 说明 |
|---|---|---|---|
create_workspace | createWorkspace | POST /workspace/create | 创建工作空间,返回 workspace_id |
create_category | createCategory | POST /category/create | 创建文件类别并上传样本,返回 category_id |
upload_file | uploadFile | POST /file/upload | 上传待处理文件,返回 batch_number |
create_rule_repo | createRuleRepo | POST /review/rule_repo/create | 创建审核规则库,返回 repo_id |
create_rule_group | createRuleGroup | POST /review/rule_group/create | 在规则库内创建规则组,返回 group_id |
create_rule | createRule | POST /review/rule/create | 在规则组内创建审核规则,绑定适用分类 |
submit_review_task | submitReviewTask | POST /review/task/submit | 提交审核任务,返回审核 task_id |
| 函数(Python) | 方法(Java) | 作用 |
|---|---|---|
_headers | authHeaders | 构造鉴权请求头 |
_check | checkResponse | 校验响应 code,统一异常处理 |
_mime | mimeType | 根据扩展名推断 MIME 类型 |
wait_for_result | waitForResult | 循环轮询 file/fetch,等待抽取完成 |
display_result | displayResult | 格式化打印抽取结果 |
wait_for_review | waitForReview | 循环轮询 review/task/result,等待审核完成 |
display_review_result | displayReviewResult | 格式化打印审核结果 |
逐步代码说明
步骤 2:创建采购合同类别
步骤 2:创建采购合同类别
合同字段较多,直接在
create_category 的 fields 参数中一次性传入所有字段,无需额外调用 add_category_field。- Python
- Java
步骤 4:获取合同抽取结果
步骤 4:获取合同抽取结果
合同文档较长,处理时间可能比普通票据更长(建议超时时间设为 180s)。结果中的
fields 数组包含所有抽取到的字段和值。- Python
- Java
抽取结果示例

审核结果示例

07 完整示例代码下载
完整可运行代码(含 Python、Java 两个版本)已内置在文档仓库的examples/ 目录下:
Python 示例
查看 Python 完整示例代码
Java 示例
查看 Java 完整示例代码
08 运行示例
- Python
- Java
环境要求:Python 3.8+1. 安装依赖2. 填写配置打开 3. 运行
contract_review.py,填写文件顶部的配置项:预期控制台输出
成功运行后,控制台将输出如下内容(workspace_id、category_id 等 ID 因运行环境不同而变化):09 结果说明
抽取结果
处理完成后,合同文件将返回分类结果和字段抽取结果。字段抽取结果位于data.fields[],每个字段包含 key、value 及坐标 position(可用于原文高亮回显)。合同场景使用 Model 2(复杂文档理解),对长文档的深度理解和字段抽取效果更优。
以下为采购合同样本文件的实际接口返回(来自 file/fetch,省略了部分 position 坐标):
sample_contract.docx
sample_contract.docx
审核结果
审核完成后,可从review/task/result 接口获取以下信息:
status:任务整体状态(1=审核通过,4=审核不通过,2=审核失败)statistics:规则通过数、不通过数汇总groups[].review_tasks[]:每条规则的详细审核结果,包含:review_result:该规则的审核结论(1=通过,4=不通过)reasoning:AI 给出的审核依据说明anchors:依据在原文中的坐标位置(可用于高亮回显)

