## 合同到期与续签提醒 {.case data-case-id="049"}

| 字段 | 值 |
| --- | --- |
| 案例编号 | `049` |
| 行业 / 部门 | SaaS / 法务 |
| 角色 | 法务专员 |
| 难度 | `入门` |
| 调用来源 | `schedule`（定时由获授权 Agent 经 App/Extension 读取合同管理系统） |

<!-- slot: 目标 -->
合同到期了没人知道，续签谈判被压缩到最后一周，或者自动续约条款悄悄生效。目标：定时让获授权 Agent 读取合同管理系统，找出 60 天内到期的合同，按"取数失败、本期无到期、缺失到期日·待确认、有合同到期"四类结果分别给出可见回执；命中时通知合同 Owner 与法务，附到期日与续签建议选项，只列选项不替人决定。法务数据纪律贯穿全程：对手方只显内部代号或类型，合同金额以区间呈现。指标：到期前 60 天已登记的合同 100% 在到期前被通知到；对手方名称与精确金额在通知中出现 0 次。

<!-- slot: 边界 -->
- **覆盖**：定时扫描 60 天内到期合同、四类结果各自出回执、命中时通知合同 Owner 与法务并附续签建议选项、对手方与金额脱敏。
- **不覆盖**：自动发起续签、自动替人选定续签方案、自动修改合同记录、跨系统合同台账对账。
- **假设**：有一个经授权能读取合同管理系统的 Agent（通过 App/Extension）；合同 Owner 仅用系统记录，缺失标"待确认"，不从对手方名称或历史记录猜。

<!-- slot: 提示词 -->
把下面这段发给 Loop，它会在后台帮你创建这个 Workflow：

```text
帮我创建一个 Workflow：每周定时由获授权的查询 Agent 经 App/Extension 读取合同管理系统，找出 60 天内到期的合同（含内部合同编号、到期日、Owner）。App/Extension 在读取侧即完成聚合、令牌化与脱敏，Agent 只接收合同编号、到期日、合同编号令牌与 Owner 角色代号等白名单字段，不接收 Owner 姓名、工号与对手方名称——展示名由法务 App 在发送侧按令牌回填，对手方名称与精确金额不进入工作流与日志。法务数据纪律：通知与回执中对手方只显内部代号或类型，合同金额以区间（如 10 万–50 万档）呈现，不出现对手方名称与精确金额。
触发：定时（计划）发起调用，调用时带入团队频道、查询 Agent 和提醒窗口（默认 60 天）。
结果分四类处理（缺失到期日的合同单列，不混入"本期无到期"）：
  有合同到期：通知合同 Owner（仅用系统记录，缺失标"待确认"）与法务频道，附合同编号、到期日与续签建议选项（续签 / 重谈条款 / 不续约），只列选项不替人决定，并留审计时间戳。
  本期无到期：所有合同都有有效到期日且都在窗口外，发一条"本期无到期合同"汇总回执并留时间戳，不要静默结束——此回执只含真正在窗口外的合同，不含缺到期日的。
  缺失到期日·待确认：到期日缺失的合同无法判定是否到期（既不是"无到期"也不是"已到期"），单独发一条"缺失到期日·待确认"清单并留时间戳，由人工在合同管理系统补全后下一轮再判定，不猜。
  取数失败（合同管理系统不可达或数据陈旧）：告警失败、留审计时间戳，按重试上限重试，仍失败则升级到值班频道。
审批：不涉及审批，到期提醒是低风险信息，直接触达，续签决策由人做。
异常：查询 Agent 回传不合结构就停在等待点等它重新提交，不自动重跑；通知发送失败按重试上限重试，仍失败则升级到值班频道并保留待发内容供人工补发；缺失到期日的合同不要猜成"未到期"或"已到期"，一律单列为"缺失到期日·待确认"，不并入"本期无到期"。
完成：四类结果各自出回执并留审计时间戳后结束。
```

<!-- slot: 流程 -->
![案例 049 合同到期与续签提醒：定时让获授权 Agent 经 App/Extension 读取合同管理系统；系统不可达按取数失败告警留审计并重试升级，本期无到期发汇总回执，缺失到期日单独发待确认清单由人补全，有合同到期则通知合同 Owner（仅用系统记录，缺失标待确认）与法务并附到期日与续签建议选项，只列选项不替人决定，对手方显内部代号或类型、金额以区间呈现，均留审计时间戳](../../../media/cases/fig-case-049-01-flow.svg){#fig-case-049-01 width=92%}

如上图所示，正常路径与异常同时可见，四类结果都有可见回执（Agent 只接收合同编号、到期日、合同编号令牌与 Owner 角色代号等白名单字段，Owner 展示名由法务 App 发送侧按令牌回填）：

1. **定时触发**：计划到点（每周）发起一次调用，带入团队频道、查询 Agent 与提醒窗口（默认 60 天）。
2. **扫描合同**：获授权 Agent 经 App/Extension 读取合同管理系统，App 在读取侧完成聚合、令牌化与脱敏，Agent 只接收白名单字段（合同编号、到期日、合同编号令牌、Owner 角色代号），展示名由法务 App 在发送侧按令牌回填；回传结构不合要求时停在原等待点，等其重新提交，不自动重跑。
3. **四类结果分流**：
   - **取数失败**：合同管理系统不可达或数据陈旧，告警失败并留审计时间戳，按重试上限重试，仍失败则升级到值班频道。
   - **本期无到期**：发一条"本期无到期合同"汇总回执并留时间戳，不静默结束；回执只含真正在窗口外的合同。
   - **缺失到期日·待确认**：到期日缺失的合同单独成清单发出并留时间戳，由人工在合同管理系统补全后下一轮再判定，不并入"本期无到期"，也不猜。
   - **有合同到期**：通知合同 Owner（仅用系统记录，缺失标"待确认"）与法务频道，附合同编号、到期日与续签建议选项（续签 / 重谈条款 / 不续约），只列选项不替人决定；对手方只显内部代号或类型，合同金额以区间呈现，并留审计时间戳。

<!-- slot: 配置 -->
你不需要手写代码或配置。把上面的提示词发给 Loop，AI 会理解意图、在后台画出这个"定时扫描 + 四路分流"流程——它知道"扫合同"需要一个发消息并等待回调的 Agent 环节、"按四类结果分流"需要一个条件路由、"通知与回执"各需要一个发消息环节，并把它们连起来。AI 还会在后台校验流程结构是否完整，你不必关心这些技术细节。

<!-- slot: 异常 -->
- **合同管理系统不可达或数据陈旧**：不当作"本期无到期"或静默结束，而是告警失败、留审计时间戳，按重试上限重试；仍失败则升级到值班频道由人工确认。
- **合同缺失到期日**：无法判定是否到期，Agent 不猜成"未到期"或"已到期"，一律单列为"缺失到期日·待确认"，由人工补全后下一轮再判定——缺失数据单列是本案例的关键纪律。
- **合同 Owner 缺失**：不从对手方名称或历史记录猜 Owner，通知中该字段标"待确认"，由法务专员补全或指定。
- **通知发送失败**：按重试上限重试投递；超过上限则升级到值班频道，并保留待发内容供人工补发。
- **本期无到期（结果为 0）**：仍发一条汇总回执并留时间戳，让"没消息"变成可核验的记录，而不是无声结束。
- **查询 Agent 回传不合结构**：本次完成请求被拒绝，停在等待点等其修正后重新提交，不自动重跑。

<!-- slot: 审批 -->
本案例不涉及审批。合同到期提醒是低风险信息，应第一时间触达 Owner 与法务；续签本身就是业务决策，本工作流只附续签建议选项（续签 / 重谈条款 / 不续约），只列选项不替人决定，决策权留在合同 Owner 与法务手里。因此不设 `request_approval` 环节，四类结果直接出回执。

<!-- slot: 外部系统 -->
本工作流的合同扫描由获授权 Agent 通过 App/Extension 完成，工作流本身不直接调用外部系统。团队频道作为调用输入提供；合同管理系统的访问凭据用 `<token>` 占位，由 Agent 运行时从密钥引用。合同管理系统不可达或数据陈旧属于取数失败，走上面的失败回执与升级，不当作"本期无到期"。通知与回执遵循法务数据纪律：对手方只显内部代号或类型，合同金额以区间呈现，不出现对手方名称与精确金额；Owner 展示名由法务 App 在发送侧按令牌回填。进入 Agent 消息、Run/Activation/Effect 记录与 App/Extension 工具日志的字段以白名单为准（仅令牌化/白名单字段，原值不进入以上任何一层），对手方名称与精确金额等敏感原始字段在源头即被聚合/区间化/令牌化，并按 10% 抽查四层实际记录。

<!-- slot: 验收 -->
- **回放集与基准**：取最近 50 份历史合同（含登记日期、到期日、Owner）回放，人工基准答案为按到期日排序的应通知清单；每周全量回放并记录扫描、通知时间戳。
- **分母与口径**：覆盖率分母为"到期前 60 天已登记且有有效到期日"的合同数；缺失到期日的合同单独计数，不并入覆盖率统计。
- **指标**：到期前 60 天已登记的合同 100% 在到期前被通知；缺失到期日合同 100% 单列为"待确认"清单，0 例被猜成"未到期"或"已到期"；取数失败 100% 出回执不静默。
- **脱敏抽样**：每周抽查 5 条通知，核对对手方只显内部代号或类型、金额只显区间，对手方名称与精确金额出现 0 次；每条通知附合同编号与到期日，与合同管理系统一致。
- **源头脱敏**：进入 Agent 消息、Run/Activation/Effect 记录与 App/Extension 工具日志的字段 100% 在白名单内（仅令牌化/白名单字段，原值不进入以上任何一层），对手方名称与精确金额出现 0 次，按 10% 抽查四层实际记录。
- **证据留痕**：每条判定留审计时间戳，抽查 5 条核对时间戳与判定依据（命中窗口 / 缺失到期日 / 零结果）可追溯。

### 复用与变体
- **同构迁移**：保密协议到期提醒、供应商框架合同到期提醒、知识产权许可到期提醒。
- **分级路由**：大额合同（高区间档）提前 90 天并单独提醒法务负责人，普通合同维持 60 天汇总通知。
- **写回合同管理系统**：在通知后再加一个 Agent 环节，由它通过 App/Extension 把"已提醒"状态写回合同管理系统；写回须是获授权 Agent 经 App/Extension 的幂等动作（幂等键=合同编号令牌+提醒周期），响应未知先查后写、按重试上限有限重试、失败升级值班并置"待处理"保留补偿，全程留审计。若不需要写侧能力，改为只读汇总或仅留 Loop 回执更安全。

<!-- slot: 媒体槽位 -->
<!-- media: fig-case-049-01-flow.svg -->
