> ## Documentation Index
> Fetch the complete documentation index at: https://docs-docflow.textin.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 新建审核任务

> 通过 REST API 新建审核任务

<Tip>
  本文介绍如何通过 REST API 新建审核任务。新建审核任务需要指定规则库和抽取任务ID列表。系统会自动将规则库中的规则与抽取任务进行匹配，对匹配的规则执行审核。
</Tip>

审核任务是将规则库应用到抽取任务上的一次审核执行。新建审核任务后，系统会自动执行审核并生成审核结果。

## 新建审核任务

新建审核任务，对指定的抽取任务进行审核：

<CodeGroup>
  ```bash curl icon=terminal wrap theme={null}
  # 使用 extract_task_ids
  curl -X POST \
    -H "Content-Type: application/json" \
    -H "x-ti-app-id: <your-app-id>" \
    -H "x-ti-secret-code: <your-secret-code>" \
    -d '{
      "workspace_id": "<your-workspace-id>",
      "name": "审核任务1",
      "repo_id": "31415926",
      "extract_task_ids": ["1234567890", "1234567891"]
    }' \
    "https://docflow.textin.com/api/app-api/sip/platform/v2/review/task/submit"

  # 使用 batch_number
  # curl -X POST \
  #   -H "Content-Type: application/json" \
  #   -H "x-ti-app-id: <your-app-id>" \
  #   -H "x-ti-secret-code: <your-secret-code>" \
  #   -d '{
  #     "workspace_id": "<your-workspace-id>",
  #     "name": "审核任务1",
  #     "repo_id": "31415926",
  #     "batch_number": "202412190001"
  #   }' \
  #   "https://docflow.textin.com/api/app-api/sip/platform/v2/review/task/submit"
  ```

  ```python Python expandable icon=python lines theme={null}
  import requests

  ti_app_id = "<your-app-id>"
  ti_secret_code = "<your-secret-code>"
  workspace_id = "<your-workspace-id>"

  host = "https://docflow.textin.com"
  url = "/api/app-api/sip/platform/v2/review/task/submit"

  # 方式1: 使用 extract_task_ids
  payload = {
      "workspace_id": workspace_id,
      "name": "审核任务1",
      "repo_id": "31415926",
      "extract_task_ids": ["1234567890", "1234567891"]
  }

  # 方式2: 使用 batch_number
  # payload = {
  #     "workspace_id": workspace_id,
  #     "name": "审核任务1",
  #     "repo_id": "31415926",
  #     "batch_number": "202412190001"
  # }

  # 方式3: 同时使用 batch_number 和 extract_task_ids（系统会自动并集去重）
  # payload = {
  #     "workspace_id": workspace_id,
  #     "name": "审核任务1",
  #     "repo_id": "31415926",
  #     "batch_number": "202412190001",
  #     "extract_task_ids": ["1234567890", "1234567891"]
  # }

  resp = requests.post(
      url=f"{host}{url}",
      json=payload,
      headers={
          "x-ti-app-id": ti_app_id,
          "x-ti-secret-code": ti_secret_code,
      },
      timeout=60,
  )

  result = resp.json()
  if result.get("code") == 200:
      task_id = result.get("result", {}).get("task_id")
      print(f"审核任务新建成功，ID: {task_id}")
  else:
      print(f"创建失败: {result.get('msg')}")
  ```
</CodeGroup>

**请求参数：**

* `workspace_id` (必填): 工作空间ID
* `name` (必填): 任务名称，最大长度100
* `repo_id` (必填): 审核规则库ID
* `extract_task_ids` (可选): 抽取任务ID数组，需要审核的抽取任务ID列表
* `batch_number` (可选): 批次号，系统会取该批次下的所有任务，与 `extract_task_ids` 做并集（去重）

**响应示例：**

```json theme={null}
{
  "code": 200,
  "msg": "success",
  "result": {
    "task_id": "31415926"
  }
}
```

## 参数说明

### 规则库ID (repo\_id)

规则库ID是您创建的审核规则库的标识。系统会使用该规则库中的所有规则对抽取任务进行审核。

**获取规则库ID：**

* 通过[创建规则库](./rule_management#创建规则库)接口创建规则库时返回
* 通过界面查看规则库列表获取

### 抽取任务ID (extract\_task\_ids)

抽取任务ID是已完成文档抽取的任务标识。只有已完成抽取的任务才能作为审核对象。

**重要说明：**

* 如果传入的是父任务ID（如文件拆分或多图切分产生的父任务），系统会自动查出该父任务的所有子任务作为输入
* 如果同时提供了 `batch_number` 和 `extract_task_ids`，系统会取批次下的所有任务与 `extract_task_ids` 做并集（自动去重）

**获取抽取任务ID：**

* 通过文件上传接口返回的 `task_id`
* 通过文件查询接口 (`/api/app-api/sip/platform/v2/file/fetch`) 获取文件信息，其中的 `task_id` 即为抽取任务ID

### 批次号 (batch\_number)

批次号用于批量指定需要审核的任务。当传入 `batch_number` 时，系统会获取该批次下的所有任务用于审核。

**使用场景：**

* 批量审核同一批次上传的所有文件
* 与 `extract_task_ids` 配合使用，实现更灵活的任务选择

**示例：获取抽取任务ID**

```python Python icon=python expandable theme={null}
import requests

ti_app_id = "<your-app-id>"
ti_secret_code = "<your-secret-code>"
workspace_id = "<your-workspace-id>"
batch_number = "<your-batch-number>"

host = "https://docflow.textin.com"
url = "/api/app-api/sip/platform/v2/file/fetch"

resp = requests.get(
    url=f"{host}{url}",
    params={
        "workspace_id": workspace_id,
        "batch_number": batch_number
    },
    headers={
        "x-ti-app-id": ti_app_id,
        "x-ti-secret-code": ti_secret_code,
    },
    timeout=60,
)

result = resp.json()
if result.get("code") == 200:
    files = result.get("result", {}).get("files", [])
    extract_task_ids = []
    for file in files:
        # 确保文件已完成抽取（recognition_status == 1）
        if file.get("recognition_status") == 1:
            task_id = file.get("task_id")
            if task_id:
                extract_task_ids.append(task_id)
    
    print(f"可用的抽取任务ID: {extract_task_ids}")
```

## 审核任务执行流程

新建审核任务后，系统会按以下流程执行审核：

1. **规则匹配**：系统根据规则库中的规则，与抽取任务的分类进行匹配
   * 检查规则的 `category_ids` 是否包含抽取任务的分类
   * 检查抽取任务是否包含规则关联的字段

2. **字段关联**：对于匹配的规则，系统从抽取结果中获取规则关联的字段值

3. **AI审核**：基于规则提示词和字段值，AI进行审核判断

4. **结果生成**：生成审核结果，包括审核状态、审核依据、位置回溯等信息

## 完整示例

完整的审核任务新建流程：

```python Python icon=python expandable theme={null}
import requests
import time

ti_app_id = "<your-app-id>"
ti_secret_code = "<your-secret-code>"
workspace_id = "<your-workspace-id>"
host = "https://docflow.textin.com"

# 1. 获取抽取任务ID
fetch_url = "/api/app-api/sip/platform/v2/file/fetch"
fetch_resp = requests.get(
    url=f"{host}{fetch_url}",
    params={
        "workspace_id": workspace_id,
        "batch_number": "<your-batch-number>"
    },
    headers={
        "x-ti-app-id": ti_app_id,
        "x-ti-secret-code": ti_secret_code,
    },
    timeout=60,
)

fetch_result = fetch_resp.json()
if fetch_result.get("code") != 200:
    print(f"获取文件列表失败: {fetch_result.get('msg')}")
    exit(1)

files = fetch_result.get("result", {}).get("files", [])
extract_task_ids = []
for file in files:
    if file.get("recognition_status") == 1:  # 确保已完成抽取
        task_id = file.get("task_id")
        if task_id:
            extract_task_ids.append(task_id)

if not extract_task_ids:
    print("没有可用的抽取任务")
    exit(1)

print(f"找到 {len(extract_task_ids)} 个抽取任务: {extract_task_ids}")

# 2. 新建审核任务
submit_url = "/api/app-api/sip/platform/v2/review/task/submit"
submit_payload = {
    "workspace_id": workspace_id,
    "name": f"审核任务_{int(time.time())}",
    "repo_id": "31415926",  # 规则库ID
    "extract_task_ids": extract_task_ids
}

submit_resp = requests.post(
    url=f"{host}{submit_url}",
    json=submit_payload,
    headers={
        "x-ti-app-id": ti_app_id,
        "x-ti-secret-code": ti_secret_code,
    },
    timeout=60,
)

submit_result = submit_resp.json()
if submit_result.get("code") == 200:
    task_id = submit_result.get("result", {}).get("task_id")
    print(f"审核任务新建成功，任务ID: {task_id}")
    print("请使用任务ID查询审核结果")
else:
    print(f"新建审核任务失败: {submit_result.get('msg')}")
```

## 删除审核任务

如果需要删除审核任务：

<CodeGroup>
  ```bash curl icon=terminal wrap theme={null}
  curl -X POST \
    -H "Content-Type: application/json" \
    -H "x-ti-app-id: <your-app-id>" \
    -H "x-ti-secret-code: <your-secret-code>" \
    -d '{
      "workspace_id": "<your-workspace-id>",
      "task_ids": ["31415926", "31415927"]
    }' \
    "https://docflow.textin.com/api/app-api/sip/platform/v2/review/task/delete"
  ```

  ```python Python expandable icon=python lines theme={null}
  import requests

  ti_app_id = "<your-app-id>"
  ti_secret_code = "<your-secret-code>"
  workspace_id = "<your-workspace-id>"

  host = "https://docflow.textin.com"
  url = "/api/app-api/sip/platform/v2/review/task/delete"

  payload = {
      "workspace_id": workspace_id,
      "task_ids": ["31415926", "31415927"]
  }

  resp = requests.post(
      url=f"{host}{url}",
      json=payload,
      headers={
          "x-ti-app-id": ti_app_id,
          "x-ti-secret-code": ti_secret_code,
      },
      timeout=60,
  )

  result = resp.json()
  print(result)
  ```
</CodeGroup>

**请求参数：**

* `workspace_id` (必填): 工作空间ID
* `task_ids` (必填): 审核任务ID数组

## 注意事项

1. **抽取任务状态**：只有已完成抽取的任务（`recognition_status == 1`）才能作为审核对象
2. **父任务处理**：如果传入的是父任务ID（如文件拆分或多图切分产生的父任务），系统会自动查出该父任务的所有子任务作为输入进行审核
3. **批次号与任务ID组合**：如果同时提供了 `batch_number` 和 `extract_task_ids`，系统会取批次下的所有任务与 `extract_task_ids` 做并集（自动去重）
4. **规则匹配**：系统会根据规则的 `category_ids` 和抽取任务的分类进行匹配，只有匹配的规则才会执行审核
5. **字段关联**：确保规则关联的字段在抽取结果中存在，否则可能影响审核的准确性
6. **异步执行**：审核任务是异步执行的，创建任务后需要通过[获取审核结果](./get_result)接口查询审核状态和结果

## 相关页面

* [审核概念](./quickstart) - 了解审核功能的核心概念
* [规则库管理](./rule_management) - 学习如何管理审核规则库
* [获取审核结果](./get_result) - 学习如何获取和使用审核结果
