# Renewal Tracker

> 合同续期追踪——显示即将到期的取消截止日，在通知窗口关闭前预警， 基于维护的续期登记簿工作。适用情形：用户说"有哪些合同即将续期"、 "我们是否错过了取消窗口"、"把这个加到续期追踪"。接收来自 saas-msa-review 的交接。

- Skill: `vivy-yi/renewal-tracker` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add vivy-yi/renewal-tracker`
- Raw SKILL.md: https://api.skillmd.com/api/skills/vivy-yi/renewal-tracker/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: vivy-yi (https://skillmd.com/u/vivy-yi)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/vivy-yi/renewal-tracker

---


## 数据源与判断框架引用

本 skill 引用场景级配置 `../../CLAUDE.md`。
来源标注规范（[YD]/[WKL]/[BD]/[GOV]/[model]）参见场景级 references/ 目录。

# /renewal-tracker — China Mainland

## 注册簿位置

`contract-review/renewal-register.yaml`

## Purpose

没人会读合同第二遍。续期日期在审查时提取一次，然后存在某处——理想情况是在取消截止日前45天就提醒你，而不是45天后。

本技能维护续期登记簿并显示即将到期的合同。

## Instructions

1. **读取注册簿** `renewal-register.yaml`

2. **默认模式：** 未来90天内即将到期的合同，按紧急程度分组（半开区间）：
   - 🔴 0–13天
   - 🟠 14–44天
   - 🟡 45–89天

3. **`--days N`：** 更改窗口

4. **`--missed`：** 已错过取消截止日的合同

5. **注册簿为空：** 扫描本地文件夹中的合同文档并批量加载

6. **输出包含建议操作：** 通知业务负责人（来自每个登记项）、哪些合同价格无上限（在窗口关闭前获取筹码）

---

## 中国公共假日处理

**中国法定假日（共11天）：**
- 元旦：1月1日，放假1天
- 春节：农历正月初一至初三，放假3天
- 清明节：农历清明当日，放假1天
- 劳动节：5月1日，放假1天
- 端午节：农历端午当日，放假1天
- 中秋节：农历中秋当日，放假1天
- 国庆节：10月1日至3日，放假3天

**调休规则：** 通过周末上班换取假日，形成"黄金周"长假（如国庆节通常放假7天）

**计算截止日时：**
- 如截止日落在周末（中国大陆通常为周六、周日），回滚至前一个工作日（周五）
- 如截止日落在法定假日，回滚至假日开始前的最后一个工作日
- **始终回滚，从不前推**——前推意味着通知在窗口关闭后才到达

**调休的不确定性：** 中国调休规则每年公布，较难提前预测。注册簿中的计算应标注 `[model calculation — verify against CN holiday calendar]`。

---

## 通知方式（中国特色）

**中国合同中的通知方式通常包括：**
- 电子邮件（最常用）
- 书面通知 + 公司公章（公司盖章的书面文件）
- 挂号信（正式存档用途）
- 快递（EMS、顺丰等，可追踪）
- 合同指定的其他方式

**Transit buffer（中国大陆境内）：**
- 电子邮件：0天（通常当日到达）
- 挂号信/快递：建议预留3-5天（考虑周末和假日）

**Transit buffer（跨境/涉及香港/台湾）：**
- 建议预留7-10天

---

## 工作日回滚规则

当计算（或导入）取消截止日时：

1. **计算日历日期：** `cancel_by_calendar = 当前期限结束日 − 通知期天数`

2. **按中国工作日回滚：**
   - 周六 → 回滚至周五
   - 周日 → 回滚至周五
   - 法定假日 → 回滚至假日开始前的最后一个工作日
   - 调休周末（需要上班的周六/周日）→ 视为工作日，不回滚

3. **检查合同自身的工作日定义：**
   查找合同中是否有"工作日"、"收到日期"、"视为收到"、"下午5点[当地时间]"等定义。如合同有明确约定，该定义优先。

4. **在注册簿中同时记录两个日期：**
   - `cancel_by_calendar`：原始计算日期
   - `cancel_by_effective`：通知有效的最后一个工作日
   - `cancel_by_roll_note`：差异原因（如"从周日2026-10-05回滚；须验证合同工作日定义"）
   - `cancel_by_provenance`：`[model calculation — verify against CN holiday calendar]`

5. **按有效日期触发预警，不是日历日期**

---

## 续期登记项结构

```yaml
- counterparty: "供应商名称"
  agreement: "合同名称"
  signed_date: 2025-06-15
  initial_term_end: 2026-06-15
  current_term_end: 2026-06-15
  renewal_mechanism: "自动年度续期"
  notice_period_days: 30
  notice_method: "书面通知+公章"  # 电子邮件 / 书面通知+公章 / 挂号信 / 快递
  transit_buffer_days: 5          # 中国大陆境内通知预留天数
  cancel_by_calendar: 2026-05-16  # initial_term_end - notice_period_days
  cancel_by_effective: 2026-05-15 # 回滚至最后一个工作日（如遇周末/假日）
  send_by_effective: 2026-05-10   # cancel_by_effective - transit_buffer_days
  cancel_by_roll_note: "从周日2026-05-17回滚至周五2026-05-15"
  cancel_by_provenance: "[model calculation — verify against CN holiday calendar]"
  price_on_renewal: "年度涨幅不超过5%"
  annual_value: 48000
  business_owner: "业务负责人@公司.com"
  contract_id: "合同编号"  # 本地合同编号或文件名
  status: "active"  # active | cancelled | renewed | lapsed
  notes: "价格有上限——续期前评估是否继续采购。备选供应商：X、Y。"
```

---

## 续期自动推进

记录 `initial_term_end` 用于存档，但计算 `cancel_by_*` 均基于 `current_term_end`。

当续期触发（取消窗口已过且未发出通知），提示：
> "本合同的自动续期已于[日期]触发。请更新注册簿：`current_term_end` 更新为[日期+续期期限]，`cancel_by_effective` 更新为[计算值]，`send_by_effective` 更新为[计算值]。是否确认？"

---

## Mode 1: 导入续期（来自审查的交接）

当 saas-msa-review 或 vendor-agreement-review 发现续期条款时，交接一条记录。追加到注册簿。如对手方已有记录，询问这是替换（已续期合同）还是新增合同。

## Mode 2: 即将到期

**默认回溯窗口：** 未来90天

**紧急程度（半开区间）：**
- 🔴 **0–13天**（取消截止日在13天内到期）
- 🟠 **14–44天**
- 🟡 **45–89天**

```markdown
## 续期——未来90天

### 🔴 取消截止日在0–13天内

| 对手方 | 取消截止日 | 续期日期 | 年费 | 负责人 | 备注 |
|---|---|---|---|---|---|
| [名称] | **[日期]** | [日期] | ¥[金额] | [邮箱] | [备注] |

### 🟠 取消截止日在14–44天内

[同上表格]

### 🟡 取消截止日在45–89天内

[同上表格]

---

**建议操作：**
- [ ] [对手方]——通知[业务负责人]：我们是否继续？
- [ ] [对手方]——价格无明确上限；在窗口关闭前获取备选供应商报价
```

## Mode 3: 扫描本地文件夹填充注册簿

如注册簿为空或陈旧：
1. 扫描本地合同文件夹（`contract-review/`）中的所有活跃合同文档
2. 提取文件名和元数据中的合同编号、对手方、续期日期
3. 对每个匹配项提取续期机制并添加到注册簿
4. 标记无法从文件名确定续期日期的合同——需要人类阅读合同

## Mode 4: 已错过窗口

```markdown
## 已错过取消窗口

以下协议的取消截止日已过，且未记录取消：

| 对手方 | 取消截止日为 | 续期日期 | 状态 |
|---|---|---|---|
| [名称] | [日期] | [日期] | 将于[日期]自动续期 |

**选项：**
- 协商延迟取消（很少成功但值得尝试）
- 接受续期，立即记录下一年的取消截止日
- 检查合同是否有其他终止权（便利终止权 / 过错终止权）
```

---

## 操作门控

追踪续期日期是研究。**采取行动**——发送不续期通知、让自动续期触发或签署续期表格——是有法律后果的步骤。

**在继续接受或拒绝续期之前（包括发送不续期通知或让自动续期超过取消截止日）：**
读取 `../CLAUDE.md` → `## Who's using this`。如 Role 为非律师：

> 此步骤有法律后果（你要么承诺另一个期限，要么终止关系）。您是否已咨询律师？如果是，请继续。如果没有，以下是向他们简要说明的内容：
>
> [生成1页摘要：对手方当前期限结束日和取消截止日、续期价格机制、如不采取行动会怎样、如想比较供应商的备选供应商，以及窗口关闭前应向律师请教的三个问题。]
>
> 如需要找律师：请联系您的专业监管机构（中国为司法部/律师协会）获取推荐服务。

未经明确确认，不继续执行此步骤。

---

## 集成：renewal-watcher agent

本插件中的 renewal-watcher agent 按计划运行此技能（默认每周），并将"即将到期"报告发布至 `../CLAUDE.md` → `## House style` → `续约提醒发送至` 所指定的频道。Mode 2 是该 agent 的主要输出。

---

## 本技能不做什么

- 不取消合同。只告知何时做决定。
- 不决定是否续期。只呈现截止日和业务负责人。
- 不阅读合同查找续期日期——这在审查时发生。

---

*Greater China Legal — commercial-legal renewal-tracker CN adapter v1.0.0*
*基于 anthropic/claude-for-legal renewal-tracker 适配中国大陆法律环境*

*[YD] — 基于 anthropic/claude-for-legal 适配中国大陆法律环境 v1.0.0*

