Skip to main content
本文以费用报销为业务场景,演示如何通过 API 完成从创建空间、配置类别、上传文件、获取抽取结果到智能审核的完整流程。 如果您刚刚接触 DocFlow,建议先在 Web 页面 体验一下产品的基本功能,再阅读本文。

01 场景说明

在费用报销业务中,财务人员每天需要处理大量不同类型的报销单据,例如:
  • 报销申请单(XLS 格式):记录申请人、出差目的、费用明细等信息
  • 酒店水单(图片):记录入住日期、离店日期及消费明细
  • 支付记录(PDF):记录交易流水号、交易金额、收付款方信息
通过 DocFlow,您只需配置一次分类和字段,后续上传的单据即可自动完成分类识别结构化信息抽取;配置好审核规则库后,还可对抽取结果进行智能审核,自动发现金额不符、字段缺失等问题。

02 业务流程

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

03 先决条件

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

04 类别与字段配置

本示例配置三个文件类别,字段设计如下:

酒店水单(样本:sample_hotel_receipt.png)

酒店水单是住宿消费的凭证,通常包含入住/离店日期等全局信息,以及按天计费的消费明细表格。字段配置同时使用基本信息字段(全局信息)和表格字段(逐行消费记录),以完整提取单据中的结构化数据:酒店水单样本

支付记录(样本:sample_payment_record.pdf)

支付记录是银行或支付机构出具的电子回单,包含交易流水号、交易双方及金额等详情。通过字段抽取,可快速核验报销金额和收付款方是否与申请单一致:支付记录样本

报销申请单(样本:sample_expense_form.xls)

报销申请单是差旅费用报销的主单据,以 Excel 表格形式记录申请人信息、出差行程及各项费用明细。通过字段抽取,系统可自动录入申请人、金额、税率等关键数据,避免手工填表出错:

05 审核规则配置

本示例的审核规则库包含 3 个规则组、8 条审核规则,覆盖单据内合规性检查、差旅政策匹配和跨单据交叉核验三个维度:

规则组 1:报销申请单合规性检查(适用分类:报销申请单)

规则组 2:差旅费用政策匹配审核(适用分类:酒店水单)

规则组 3:跨文档交叉审核(适用分类:报销申请单 + 酒店水单 + 支付记录)

跨文档规则的 category_ids 包含多个分类 ID,只有当审核任务覆盖所有关联分类时,该规则才会被触发执行。

06 代码结构说明

示例代码将完整的七步流程放在一起运行,便于理解端到端的调用链路。在实际生产中,步骤 1、2、5(创建工作空间、配置文件类别、配置审核规则库)只需执行一次;后续处理新单据时,只需重复步骤 3、4、6、7(上传文件 → 获取抽取结果 → 提交审核任务 → 获取审核结果),直接复用已有的工作空间、类别和规则库即可。 示例代码中的函数分为两类,理解这一点有助于对照 API 文档进行调试和扩展。

两类函数

REST API 调用函数 — 每个函数直接封装一个 API 端点,函数参数与接口文档一一对应: 工具辅助函数 — 不直接对应 API 端点,提供公共基础能力或封装轮询/展示逻辑:

逐步代码说明

步骤 1:创建工作空间

工作空间名称中加入时间戳,确保每次运行都会创建独立的新空间,避免重名错误。

步骤 2:配置文件类别

create_category 通过 multipart 表单一次性完成类别创建、样本上传和字段配置。对于需要表格字段的类别(如酒店水单),在创建后再调用 batch_add_category_fields 追加。

步骤 3:上传待处理文件

DocFlow 提供两种上传方式:
  • 异步上传 file/upload:立即返回 batch_number,需配合步骤 4 轮询 file/fetch 获取结果,适合批量并行上传
  • 同步上传 file/upload/sync:等待处理完成后直接返回抽取结果(结构与 file/fetch 一致),无需轮询,适合对接简单或文件量少的场景
两者的请求参数完全一致,仅 URL 路径不同。方式一:异步上传(需配合步骤 4 轮询)
方式二:同步上传(直接返回抽取结果,跳过步骤 4)

步骤 4:获取抽取结果(使用同步上传时可跳过)

若步骤 3 使用了同步上传 file/upload/sync,则已直接获得抽取结果,可跳过本步骤。
wait_for_result 封装了轮询逻辑,每隔 3 秒查询一次 file/fetch,直到 recognition_status 变为 1(成功)。返回的文件对象中包含 task_id,后续审核步骤需要用到。

步骤 5:配置审核规则库

规则库采用三层结构:规则库 → 规则组 → 规则。create_rulecategory_ids 参数指定规则适用的分类,使用步骤 2 中获得的 category_id

步骤 6:提交审核任务

从步骤 4 的抽取结果中提取 task_id,传入审核接口。审核任务是异步执行的,提交后需要轮询结果。

步骤 7:获取审核结果

wait_for_review 轮询 review/task/result 接口,直到任务状态变为终态(1=审核通过、2=审核失败、4=审核不通过、7=识别失败)。

抽取结果示例

抽取结果示例

审核结果示例

审核结果示例

07 完整示例代码下载

完整可运行代码(含 Python、Java 两个版本)已内置在文档仓库的 examples/ 目录下:

Python 示例

查看 Python 完整示例代码

Java 示例

查看 Java 完整示例代码

08 运行示例

环境要求:Python 3.8+1. 安装依赖
2. 填写配置打开 expense_reimbursement.py,填写文件顶部的配置项:
3. 运行
运行成功后,可登录 DocFlow Web 页面,在对应工作空间下直观查看每份文件的分类、字段抽取结果和智能审核结果,便于与代码输出对照验证。

预期控制台输出

成功运行后,控制台将输出如下内容(workspace_id、category_id 等 ID 因运行环境不同而变化):

09 结果说明

抽取结果

处理完成后,每份文件将返回分类结果和字段抽取结果。字段抽取结果位于 data.fields[],每个字段包含 keyvalue 及坐标 position(可用于原文高亮回显)。 以下为三份样本文件的实际接口返回(来自 file/fetch,省略了部分 position 坐标):

sample_expense_form.xls

sample_hotel_receipt.png

sample_payment_record.pdf

审核结果

审核完成后,可从 review/task/result 接口获取以下信息:
  • status:任务整体状态(1=审核通过,4=审核不通过,2=审核失败)
  • statistics:规则通过数、不通过数汇总
  • groups[].review_tasks[]:每条规则的详细审核结果,包含:
    • review_result:该规则的审核结论
    • reasoning:AI 给出的审核依据说明
    • anchors:依据在原文中的坐标位置(可用于高亮回显)