
Court Sms
- 76 installs
- 543 repo stars
- Updated August 5, 2026
- cat-xierluo/legal-skills
Parse Chinese court SMS notices to extract case number, parties, and links, then download the legal documents and archive them to the case folder.
About
Processes Chinese court SMS notices (document service, filing, hearing reminders) by extracting the case number, parties, and download link, then downloading and archiving documents to the matching case directory. A developer or lawyer uses it when a court SMS or service link arrives.
- Parses SMS or accepts a raw service link
- Downloads and archives documents to the case folder
Court Sms by the numbers
- 76 all-time installs (skills.sh)
- Ranked #912 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/cat-xierluo/legal-skills --skill court-smsAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 76 |
|---|---|
| repo stars | ★ 543 |
| Last updated | August 5, 2026 |
| Repository | cat-xierluo/legal-skills ↗ |
What it does
Parse Chinese court SMS notices to extract case number, parties, and links, then download the legal documents and archive them to the case folder.
Files
法院短信识别与文书下载
功能概述
处理法院短信的完整流程:粘贴短信 → 解析内容 → 匹配案件 → 下载文书 → 归档保存。
支持两种触发方式:
方式一:粘贴短信原文
收到法院短信,内容如下:
【xx市人民法院】张三,您好!您有(2025)苏0981民初1234号案件文书送达,请点击链接查收:https://zxfw.court.gov.cn/zxfw/#/pagesAjkj/app/wssd/index?qdbh=DEMO1&sdbh=DEMO2&sdsin=DEMO3方式二:直接发送送达链接
用户可能直接粘贴送达链接(非完整短信文本),此时跳过短信文本解析,直接从 URL 中提取 qdbh、sdbh、sdsin 参数,进入第三步下载流程。
https://zxfw.court.gov.cn/zxfw/#/pagesAjkj/app/wssd/index?qdbh=xxx&sdbh=xxx&sdsin=xxx短信类型分类
| 类型 | 特征 | 含下载链接 | 处理方式 |
|---|---|---|---|
| 文书送达 | 含送达平台链接 + 案号 | 是 | 下载文书并归档到案件目录 |
| 立案通知 | 含"已立案"等关键词 | 可能有 | 展示解析结果 |
| 信息通知 | 无链接,纯信息 | 否 | 展示解析结果 |
支持的送达平台:zxfw.court.gov.cn(全国)、sd.gdems.com(广东)、jysd.10102368.com(集约送达)、dzsd.hbfy.gov.cn(湖北)、sfpt.cdfy12368.gov.cn(司法送达网)。同一平台可能使用不同域名(同构异域名),通过 URL 路径特征识别平台。详见 references/sms-patterns.json。
---
工作流(四步)
第一步:输入解析
1. 读取 references/sms-patterns.json 作为解析参考 2. 判断输入类型:
- 完整短信:包含法院签名(如
【xx法院】)+ 正文 + 链接 → 完整解析流程 - 纯链接:用户直接发送送达 URL(如
https://zxfw.court.gov.cn/...?qdbh=xxx&sdbh=xxx&sdsin=xxx)→ 跳过短信文本解析,直接从 URL 提取参数,进入第三步下载。案号、当事人等信息在下载文书后从文书内容中提取。
3. 对用户粘贴的短信文本进行分析(纯链接输入跳过此步):
a) 短信分类:根据关键词判断类型
- 文书送达:包含 zxfw.court.gov.cn 链接
- 立案通知:包含"已立案"、"立案通知"等
- 信息通知:其他
b) 案号提取:使用正则 [((〔[]\d{4}[))〕]] 匹配标准案号格式
标准案号格式示例:
(2025)苏0981民初1234号(2024)粤0604执保5678号〔2025〕京0105民初901号
c) 当事人提取:从短信文本初步识别,最终以文书内容为准
- 注意:短信中的称呼(如"张三,您好")仅为短信接收人,不作为案件当事人
- 公司名称:
xx有限责任公司、xx有限公司、xx股份有限公司 - 诉讼对峙:
A与B、A诉B、原告A 被告B - 角色前缀:
原告:xxx、被告:xxx等 - 下载文书后,以起诉状、传票中的当事人信息为准,覆盖短信阶段的初步判断
d) 下载链接提取:识别短信中的送达平台链接并提取参数
| 平台 | 域名 | 下载方式 | 提取参数 |
|---|---|---|---|
| 全国法院统一送达平台 | zxfw.court.gov.cn | curl API 直连 | qdbh, sdbh, sdsin |
| 广东法院电子送达 | sd.gdems.com | 浏览器自动化 | 路径中的送达标识码 |
| 集约送达平台 | jysd.10102368.com | 浏览器自动化 | key |
| 湖北电子送达 | dzsd.hbfy.gov.cn | HTTP API(免账号)/ 浏览器自动化(账号模式) | 免账号:msg;账号模式:账号+密码从正文提取 |
| 司法送达网 | sfpt.cdfy12368.gov.cn | 纯 Playwright(无 API) | 验证码(手机尾号后6位 / 短信验证码) |
e) 发送时间提取(P0):从送达平台 API 响应中提取发送时间,用于后续上诉期限计算
- 优先来源:zxfw API 响应中的
dt_cjsj字段(送达记录创建时间,ISO 8601 格式) - 短信网关时间:部分手机短信会显示发送时间,匹配
发送:YYYY-MM-DD HH:mm格式 - 如果无法提取送达时间,展示"送达时间待确认",不阻塞后续流程
- 记录到归档 JSON 的
document.sent_at字段
排除列表:法院名称、法官姓名、地名、法律术语等不应作为当事人提取。详见sms-patterns.json→party_extraction.exclude_keywords。
输出格式(向用户展示):
📋 短信解析结果:
- 类型:文书送达
- 案号:(2025)苏0981民初1234号
- 当事人:张三、xx有限公司
- 下载链接:已提取(zxfw.court.gov.cn)第二步:确定归档目录
1. 扫描当前工作目录:识别目录结构,找到与短信案号或当事人匹配的案件目录 2. 查找归档子目录:在匹配到的案件目录下,查找法院文书相关的子目录(如 08*、法院送达、court 等) 3. 如未找到匹配案件,自动在当前工作目录(项目根目录)下新建 {案号} {当事人与案由}/,不询问用户
第三步:文书下载
平台判断:根据第一步识别的链接域名,选择下载策略。
- zxfw.court.gov.cn → 方案一(API 直连)→ 方案二 → 方案三-sd.gdems.com或jysd.10102368.com→ 跳过方案一,直接方案二 → 方案三
- dzsd.hbfy.gov.cn → 湖北专属流程(见下方)-sfpt.cdfy12368.gov.cn(含广西实例171.106.48.55:28083)→ SFDW 专属流程(见下方)
- 未知域名但 URL 路径匹配已知平台特征 → 按路径识别平台(同构异域名支持)
- 完全无法识别 → 提示用户提供链接信息
>
⛔ 降级铁律:严格串行,禁止并行。当前方案成功即停止,绝不降级。禁止"双保险"并行尝试多个方案。
依赖
| 依赖 | 用途 | 适用方案 | 安装方式 |
|---|---|---|---|
curl | API 下载 | 方案一 | macOS/Linux 预装 |
jq | JSON 解析(可选) | 方案一 | brew install jq |
| Playwright | 浏览器自动化 | 方案二/三 | 见下方 |
Playwright 安装指引(仅方案二/三需要):
# 方案二: Playwright CLI
npm install -g playwright
npx playwright install chromium
# 方案三: Playwright MCP(需在 Claude Code 设置中配置)
# 在 settings.json 的 mcpServers 中添加:
# "playwright": { "command": "npx", "args": ["@anthropic-ai/mcp-playwright"] }⛔ 大多数情况下不需要 Playwright:zxfw 平台方案一直接 curl 调用 API,无需浏览器。仅 gdems/jysd 平台或方案一失败后才需要方案二/三。禁止在方案一执行期间同时打开浏览器。
方案一 — API 直连(优先)
完全无头,无需浏览器。直接调用 zxfw 后端 API 获取文书下载链接,再用 curl 下载 PDF。
API 信息:
- 端点:
POST https://zxfw.court.gov.cn/yzw/yzw-zxfw-sdfw/api/v1/sdfw/getWsListBySdbhNew - Content-Type:
application/json - 请求体:
{ "qdbh": "xxx", "sdbh": "xxx", "sdsin": "xxx" }(从短信 URL 提取) - 响应字段:
data[].c_wsmc(文书名称)、data[].wjlj(OSS 签名下载链接)、data[].c_fymc(法院名称) - 无需认证、无需浏览器
# 1. 从短信 URL 提取参数(示例)
qdbh="DEMO_qdbh_value"
sdbh="DEMO_sdbh_value"
sdsin="DEMO_sdsin_value"
# 2. 调用 API 获取文书列表
mkdir -p /tmp/court-sms-staging/
resp=$(curl -s -X POST "https://zxfw.court.gov.cn/yzw/yzw-zxfw-sdfw/api/v1/sdfw/getWsListBySdbhNew" \
-H "Content-Type: application/json" \
-d "{\"qdbh\":\"$qdbh\",\"sdbh\":\"$sdbh\",\"sdsin\":\"$sdsin\"}")
# 3. 解析文书列表,逐个下载 PDF
echo "$resp" | jq -r '.data[] | "\(.c_wsmc)\t\(.wjlj)"' | while IFS=$'\t' read -r name url; do
curl -sL -o "/tmp/court-sms-staging/${name}.pdf" "$url"
done
# 4. 验证下载结果
ls -lh /tmp/court-sms-staging/*.pdf方案二 — 无头浏览器(Playwright CLI)
当方案一 API 不可用或链接过期时,用 Playwright CLI 无头模式打开页面,拦截网络请求获取下载链接。
# 需要先安装 playwright
npx playwright install chromium 2>/dev/null
# 无头模式运行(脚本需自行编写,拦截 getWsListBySdbhNew API 响应)
node scripts/download_court_docs.mjs --url "{短信链接}" --output /tmp/court-sms-staging/方案三 — 交互式浏览器(Playwright MCP)
当方案二不可用时(需要已配置 Playwright MCP):
1. browser_navigate → 打开短信中的 zxfw URL
2. 等待页面加载
3. browser_evaluate → 直接调用 fetch API 获取文书列表
4. browser_run_code → 下载 PDF 文件到 /tmp/court-sms-staging/如 API 调用未成功,改用页面交互:
1. browser_snapshot → 查看当前页面结构
2. 找到文书列表或 PDF 预览区域
3. 定位下载按钮(可能在 iframe 内)
4. browser_click → 点击下载
5. 等待下载完成,保存到临时目录湖北平台下载流程(dzsd.hbfy.gov.cn)
湖北电子送达平台有两种链路,根据 URL 格式自动选择:
链路一:免账号模式(URL 含 /hb/msg=xxx)
1. 从 URL 提取 msg 参数值 2. 尝试 HTTP API 直连:
msg="从URL提取的msg值"
mkdir -p /tmp/court-sms-staging/
# 查询文书信息
resp=$(curl -s -X POST "http://dzsd.hbfy.gov.cn/delimobile/tDeliSms/findSmsInfo?t=$(date +%s%3N)" \
-H "Content-Type: application/json" \
-H "Referer: http://dzsd.hbfy.gov.cn/deli-mobile-ui/" \
-d "{\"msg\":\"$msg\"}")
# 检查是否需要验证码(data.isNeedCaptcha == "Y")
# 如需验证码或无可下载文书,降级到 Playwright MCP
# 逐个下载文书
echo "$resp" | jq -r '.data.docList[] | "\(.docName)\t\(.downloadPath)"' | while IFS=$'\t' read -r name path; do
if [ -n "$path" ]; then
curl -sL -o "/tmp/court-sms-staging/${name}.pdf" "http://dzsd.hbfy.gov.cn/delimobile${path}"
fi
done3. 如需验证码或 HTTP 失败,降级到 Playwright MCP(方案三)
链路二:账号模式(URL 含 /sfsddz)
1. 从短信正文提取凭证:
- 账号:匹配
账号\s*(\d{15,20}) - 默认密码:匹配
默认密码[::]\s*([0-9A-Za-z]+)
2. 需要浏览器自动化(Playwright MCP),登录页包含验证码 3. 登录后遍历待签收/已签收/已过期文书列表,逐个下载
提示:湖北平台两种模式都可能遇到验证码。免账号模式优先尝试 HTTP API,账号模式建议引导用户手动打开链接或使用 Playwright MCP。
司法送达网下载流程(SFDW - sfpt.cdfy12368.gov.cn)
司法送达网所有 POST 请求使用 TDHCryptoUtil 加密,无法通过 HTTP API 下载,只能使用纯 Playwright 流程。
广西实例:171.106.48.55:28083 域名下的链接路由到同一 SFDW 平台,下载流程相同。
验证码获取(两种方式,按优先级尝试):
1. 手机尾号后6位(优先):从案件分配信息中获取律师手机号,取后6位作为验证码输入 2. 短信验证码:从短信正文中提取,匹配 验证码[::]\s*(\w{4,6})
Playwright MCP 流程:
1. browser_navigate → 打开短信中的 SFDW 链接
2. 等待页面自动重定向到 pc.html?tdhParams=xxx
3. browser_snapshot → 查看验证码输入页面(input#checkCode)
4. 输入验证码(优先手机尾号后6位,其次短信验证码)
5. browser_evaluate → 调用 Vue app.checkYzm() 触发验证
6. 验证通过后 browser_evaluate → 获取 app.$data.wsList(文书列表)
7. 遍历 wsList,逐个调用 downloadFile(app, ws) 下载文书
8. 保存到 /tmp/court-sms-staging/提示:如手机尾号验证失败,提示用户查看短信中的验证码并手动输入。wsList 每项包含 wjmc(文件名)、wjgs(格式)。
失败兜底
当三级均失败时:
⚠️ 自动下载失败,请手动访问以下链接下载:
{原始链接}
下载后请将文件放到对应案件目录中。
我将为您创建待处理记录。第四步:归档保存
1. 确定目标目录:根据当前项目环境自动判断,不询问用户
- 扫描当前项目目录,匹配与案号或当事人相关的案件目录
- 如找到匹配案件目录,优先查找法院文书子目录(如
08*、法院送达、court等);如无子目录则直接归档到案件根目录 - 如未找到匹配案件,自动在当前项目下新建:
{案号} {当事人与案由}/ - 如目标目录不存在,自动创建
2. 获取当前日期:date "+%Y%m%d" 3. 确定文书标题:
- 优先使用 API 返回的标题
- 否则根据
sms-patterns.json中的document_titles映射推断 - 最后回退到原始文件名(去除扩展名),如仍无法确定则使用
未知文书
4. 构建文件名:{title}({case_name})_{YYYYMMDD}收.pdf
- 示例:
受理通知书(张三与李四合同纠纷)_20260404收.pdf - 清理非法字符:
< > : " | ? * \ / - 如同名文件已存在,追加
_2后缀
5. 移入目标目录 6. 写入内部记录:保存本次处理的完整信息到 skill 内部的 `archive/` 目录(即 .claude/skills/court-sms/archive/),不是案件文件夹。格式详见 `references/archive-format.md` 7. 基础文书解析:法院 PDF 通常带文字层,提取首页文本,快速识别文书类型和关键信息
- 传票:提取开庭时间、地点、法庭、案号,向用户高亮提醒
- 通知书/告知书:提取缴费期限、举证期限等关键日期
- 起诉状/答辩状:提取案由、当事人、诉讼请求概要
- 判决书:识别为一审判决书,记录文书类型,触发上诉期限计算(P1)
- 其他文书:展示文书标题和法院名称
- 如一次下载多份文书,逐一解析,汇总为一份报告
深度分析(如判决书解读、合同审查)不在此技能范围内,请使用专用分析技能处理。
8. 上诉期限计算(P1):当识别到判决书/裁定书时自动计算
- 适用条件:文书类型为判决书/裁定书(包括一审判决书、民事判决书、裁定书等)
- 不同案件类型的上诉期限(详见
sms-patterns.json→appeal_calculation):
| 案件类型 | 上诉期限 |
|---|---|
| 民事一审判决 | 送达后15天 |
| 民事裁定 | 送达后10天 |
| 行政判决 | 送达后15天 |
| 刑事判决 | 送达后10天 |
| 刑事裁定 | 送达后5天 |
- 计算公式:
上诉截止日期 = 送达日期 + 上诉期限天数 - 送达日期来源:
- 优先使用 zxfw API 响应的
dt_cjsj字段(送达记录创建时间) - 次选使用短信接收时间
received_at - 无法确定时,展示"送达时间待确认"
- 归档 JSON 字段:写入
document.appeal_deadline和document.appeal_days_remaining
9. 向用户汇报:按 `references/report-format.md` 输出结构化报告
- 先确认归档完成(案号、法院、当事人、案由、文件数、位置)
- 列出所有已归档的文书清单
- 如含传票,⚠️ 高亮提醒开庭时间、地点、审理程序
- 如含判决书,⏰ 展示上诉期限信息
- 如部分失败,列出失败文书和原始链接
第五步:PDF 后处理(可选)
不默认启用。仅在检测到文件拆分时主动提示用户。
归档完成后,扫描目标目录中的 PDF 文件,检测是否有同一文书被拆分为多个文件的情况。
读取用户偏好
读取 config/user-preferences.json 获取用户的合并和重命名偏好。如文件不存在,使用默认值(参考 config/user-preferences.example.json)。
关键偏好项:
| 偏好 | 默认值 | 说明 |
|---|---|---|
merge_strategy | per_evidence | 合并策略:per_evidence(按编号分别合并)或 unified(统一合并) |
merge_options.unified.bookmarks.enabled | true | 统一合并时是否添加 PDF 书签 |
rename.enabled | true | 是否精简文件名 |
触发检测
读取 references/sms-patterns.json → post_processing.trigger 配置,按以下规则分组:
分组规则:
1. 证据类:文件名以"证据"开头 → 按编号分组(证据1、证据2、证据3…)
2. 其他文书:按文书类型分组(传票、起诉状、应诉通知书…)
3. 如任一组内文件数 > 3(threshold),触发提示示例:证据3 下有 10 个 PDF → 触发。
用户确认
使用 AskUserQuestion 提示用户,列出检测到的拆分情况:
检测到以下文书被拆分为多个 PDF:
- 证据3:10 个文件
- 证据5:4 个文件
是否执行 PDF 后处理(合并 + 重命名)?
→ 是,合并所有
→ 让我选择(逐个确认)
→ 跳过执行后处理
用户确认后,根据 user-preferences.json 中的 merge_strategy 执行:
策略一:per_evidence(默认)
按单个证据编号分别合并,每个证据独立保留:
- 证据3 有 10 个拆分文件 → 合并为「证据3:打印截图.pdf」
- 证据5 有 4 个拆分文件 → 合并为「证据5:电脑截图.pdf」
- 未被拆分的证据(如证据1 只有 1 个文件)保持不动策略二:unified
将证据目录 + 所有证据合并为一个「原告证据.pdf」,并添加 PDF 书签:
合并顺序:证据目录 → 证据1 → 证据2 → … → 证据N
书签格式:
📑 证据目录
📑 证据1:仲裁申请书、不予受理通知书
📑 证据2:劳动合同、保密协议
📑 证据3:被告工资表
📑 证据4:泄露账号密码的电脑截图
📑 证据5:打印及拷贝资料的电脑截图
📑 证据6:删除电脑操作痕迹的截图书签名称使用简洁版:证据编号 + 冒号 + 证据标题(去除当事人和日期后缀)。使用 pypdf 的 add_outline_item 添加书签。
用户可随时修改 user-preferences.json 切换策略,无需改动 skill 本身。页面尺寸标准化
合并过程中同时标准化页面尺寸为 A4(210×297mm)。使用 pypdf 逐页处理:
from pypdf import PdfReader, PdfWriter, Transformation
A4_W = 595.27 # 210mm in points
A4_H = 841.89 # 297mm in points
for page in reader.pages:
pw, ph = float(page.mediabox.width), float(page.mediabox.height)
is_landscape = pw > ph
# 保持原始方向:纵向→A4纵向,横向→A4横向
target_w = A4_H if is_landscape else A4_W
target_h = A4_W if is_landscape else A4_H
# 等比缩放并居中
scale = min(target_w / pw, target_h / ph)
offset_x = (target_w - pw * scale) / 2
offset_y = (target_h - ph * scale) / 2
new_page = writer.add_blank_page(width=target_w, height=target_h)
page.add_transformation(Transformation().scale(scale).translate(offset_x, offset_y))
new_page.merge_page(page)规则:
- 纵向页面 → A4 纵向(210×297mm)
- 横向页面 → A4 横向(297×210mm),不强制旋转为纵向
- 等比缩放、居中放置,不裁剪、不拉伸
精简文件名
根据 user-preferences.json → rename 配置对所有文件统一重命名:
去除规则(strip_patterns):
- 去掉括号内的当事人信息:(张三与李四合同纠纷)
- 去掉日期后缀:_20260405收
- 去掉平台标记:(合并)、(自贸法庭)、(素)-
特殊映射(special_mappings):
- 起诉状(素)… → 起诉状(要素式).pdf
- 开庭传票 → 传票.pdf重命名示例:
| 原始 | 重命名后 |
|---|---|
传票(张三与李四合同纠纷)_20260405收.pdf | 传票.pdf |
起诉状(合并).pdf | 起诉状.pdf |
起诉状(素)-要素式起诉状(合并).pdf | 起诉状(要素式).pdf |
应诉通知书(自贸法庭).pdf | 应诉通知书.pdf |
E法桥平台使用告知书(xxx)_20260405收.pdf | E法桥平台使用告知书.pdf |
---
内部归档格式
每次处理完成后在 archive/ 下创建 JSON 记录,格式详见 `references/archive-format.md`。
---
常见法院短信格式参考
文书送达短信
【xx市人民法院】张三,您好!您有(2025)苏0981民初1234号案件文书送达,
请点击链接查收:
https://zxfw.court.gov.cn/zxfw/#/pagesAjkj/app/wssd/index?qdbh=DEMO1&sdbh=DEMO2&sdsin=DEMO3
如非本人操作请联系法院。立案通知短信
【xx市xx区人民法院】您好,您提交的立案材料已审核通过。
案号:(2025)京0105民初54321号
请及时缴纳诉讼费用。开庭提醒短信
【xx市xx区人民法院】提醒:您有(2025)苏0508民初567号案件,
定于2025年3月15日上午9:30在第3法庭开庭,请准时到庭。湖北电子送达短信(免账号)
【xx人民法院】您有案件文书待查收,请点击链接查收:
http://dzsd.hbfy.gov.cn/hb/msg=XXXXXXX
如有疑问请联系法院。湖北电子送达短信(账号模式)
【xx人民法院】您有(2025)鄂xxxx民初xxxx号案件文书送达。
账号 420xxxxxxxxxxxxx
默认密码:xxxxxx
请登录 http://dzsd.hbfy.gov.cn/sfsddz 查收。司法送达网短信
【xx人民法院】您有(2025)川xxxx民初xxxx号案件文书送达。
验证码:A1B2C3
请点击链接查收:https://sfpt.cdfy12368.gov.cn/sfsdw//r/xxxxxxxxxxxx---
故障排除
| 问题 | 解决方案 |
|---|---|
| 短信无法识别类型 | 展示原文,请用户确认类型后继续 |
| 案号提取失败 | 手动输入案号 |
| 当事人识别不准 | 提示用户确认/修正当事人列表 |
| 无匹配案件 | 提供三个选项:选已有/新建/暂存 |
| Playwright 下载超时 | 检查网络连接,尝试刷新页面重试 |
| 页面需要验证码 | 通知用户,暂停等待手动处理 |
| 下载文件损坏 | 清理临时目录,重新尝试下载 |
| 目标目录不存在 | 自动创建对应目录 |
| SFDW 验证码验证失败 | 尝试手机尾号后6位和短信验证码两种方式,均失败时提示用户联系法院 |
---
配置
无额外配置需求。解析规则参考 references/sms-patterns.json。
如需修改解析规则(添加新文书标题、调整正则等),编辑该 JSON 文件即可。
---
🔄 变更历史
完整变更日志见 CHANGELOG.md。归属声明见 references/ATTRIBUTION.md。
变更日志
本项目的所有重要变更都将记录在此文件。
[1.5.0] - 2026-04-15
新增
- 司法送达网平台支持:新增
sfpt.cdfy12368.gov.cn(司法送达网)的链接识别和文书下载 - 纯 Playwright 下载流程:所有 POST 请求使用 TDHCryptoUtil 加密,无法通过 HTTP API 下载
- 验证码双模式:优先手机尾号后6位(从案件分配中获取律师手机号),其次从短信正文提取验证码(
验证码[::]\s*(\w{4,6})) - 广西实例支持:
171.106.48.55:28083域名路由到同一 SFDW 平台 sms-patterns.json新增 sfdw 平台配置段(含 verification、browser_flow 字段)- 同构异域名支持:所有平台链接正则从硬编码域名改为通用主机匹配(
[^\s/]+),通过 URL 路径特征识别平台而非域名 - zxfw:
https?://[^\s/]+/zxfw/#/pagesAjkj/app/wssd/index?... - gdems:
https?://[^\s/]+/v3/dzsd/[a-zA-Z0-9]+ - jysd:
https?://[^\s/]+/sd?key=[a-zA-Z0-9_\-]+ - hbfy:
https?://[^\s/]+/(?:hb/msg=[a-zA-Z0-9]+|sfsddz\b) - 新增
canonical_domain字段保留已知主域名用于 API 调用 - 平台支持扩展至 5 个:全国法院统一送达(zxfw)、广东电子送达(gdems)、集约送达(jysd)、湖北电子送达(hbfy)、司法送达网(sfdw)
- SKILL.md 新增 SFDW 下载流程说明(纯 Playwright + 验证码双模式 + 广西实例)
- SKILL.md 新增 SFDW 短信格式示例
改进
- 文书重命名回退:当文书标题无法识别时,优先使用原始文件名(去除扩展名),而非直接默认为"未知文书"
sms-patterns.json新增rename_fallback顶层配置段
引用
- 上游参考:[FachuanHybridSystem][fachuan-repo] →
sfdw_scraper.py(司法送达网纯 Playwright 下载逻辑)、sms_parser_service.py(同构异域名正则更新)、jysd_scraper.py(手机号验证策略参考)
[1.4.0] - 2026-04-10
新增
- 湖北电子送达平台支持:新增
dzsd.hbfy.gov.cn(湖北法院)的链接识别和文书下载 - 免账号模式:识别
/hb/msg=xxx链接,支持 HTTP API 直连下载(POST /delimobile/tDeliSms/findSmsInfo),需验证码时降级到浏览器 - 账号模式:识别
/sfsddz入口链接,从短信正文提取账号(账号\s*(\d{15,20}))和默认密码(默认密码[::]\s*([0-9A-Za-z]+)) - 新增
sms-patterns.json中的 hbfy 平台配置段(含免账号/账号两种模式的 API 信息和凭证提取正则) - 平台支持扩展至 4 个:全国法院统一送达(zxfw)、广东电子送达(gdems)、集约送达(jysd)、湖北电子送达(hbfy)
- SKILL.md 新增湖北平台下载流程说明(免账号 HTTP API + 账号模式浏览器自动化)
- SKILL.md 新增湖北短信格式示例(免账号模式和账号模式两种)
引用
- 上游参考:[FachuanHybridSystem][fachuan-repo] →
sms_parser_service.py(短信解析新增 hbfy 正则)、hbfy_scraper.py(湖北平台完整下载逻辑)
[fachuan-repo]: https://github.com/Lawyer-ray/FachuanHybridSystem
新增
- 送达时间检测(P0):从 zxfw API 响应的
dt_cjsj字段提取送达记录创建时间,作为 sent_at 使用,无需从 PDF 解析 - 上诉期限自动计算(P1):识别判决书/裁定书时,根据送达时间自动计算上诉截止日期
- 民事一审判决:送达后15天
- 民事裁定:送达后10天
- 行政判决:送达后15天
- 刑事判决:送达后10日
- 刑事裁定:送达后5日
- 归档 JSON 新增字段:
document.type、document.sent_at、document.appeal_deadline、document.appeal_days_remaining - 归档 JSON 完整保存 API 响应:将 zxfw API 的完整响应(c_fymc、c_fybh、dt_cjsj、documents 数组)存入
download.api_response - 汇报格式新增:上诉期限展示区块(第四部分),格式为
⏰ 上诉期限提醒 - sms-patterns.json 新增:
sent_time_extraction(送达时间提取规则)、appeal_calculation(上诉期限计算规则)
引用
对应 GitHub Issue:https://github.com/cat-xierluo/legal-skills/issues/10
[1.2.1] - 2026-04-05
新增
- 两种合并策略可切换:
per_evidence(按编号分别合并,默认)和unified(统一合并为原告证据.pdf + PDF 书签) - 页面尺寸标准化:合并 PDF 时自动将所有页面统一为 A4,保持原始方向(纵向→A4 纵向,横向→A4 横向),等比缩放居中放置
- PDF 书签:unified 策略下自动添加书签,格式为「证据N:标题」,支持点击跳转
- 重命名规则:精简文件名,去除括号内当事人信息、日期后缀、平台标记等冗余内容
[1.2.0] - 2026-04-05
新增
- PDF 后处理功能(第五步,可选):归档完成后自动检测拆分文件,提示用户是否合并 + 重命名
- 触发条件:扫描归档目录,按文书类型分组,任一组文件数 > 3 时弹出提示
- 用户偏好系统:新增
config/user-preferences.json(含config/user-preferences.example.json模板),支持自定义合并策略和重命名规则 - 偏好文件按项目约定放入
config/目录(.example入 git,实际配置被 gitignore 忽略),与clawhub-sync等 skill 保持一致 references/sms-patterns.json新增post_processing配置段(触发阈值、偏好文件路径指向config/)- 用户确认交互:AskUserQuestion 三选一(合并所有 / 逐个选择 / 跳过)
[1.1.2] - 2026-04-05
新增
- 归档汇报格式拆分到
references/report-format.md:三段式结构(归档确认 → 文书清单 → 传票特别提醒),SKILL.md 只保留引用 - 当事人提取优先级明确:文书内容(起诉状/传票)> API 返回 > 短信文本;短信中的称呼仅为接收人,不作为当事人
改进
- 归档目录策略改为自动创建:未找到匹配案件时直接在当前项目下新建
{案号} {当事人与案由}/08 - 🏛️ 法院送达/,不再询问用户 - 传票提醒在汇报末尾以 ⚠️ 高亮,包含开庭时间(追加星期几)、地点、审理程序
[1.1.1] - 2026-04-05
改进
- 基础文书解析:下载后提取 PDF 首页文本,快速识别传票(开庭时间/地点)、通知书(缴费期限)、起诉状(案由/当事人)等关键信息并告知用户
- 归档格式拆分到
references/archive-format.md,SKILL.md 只保留引用 - 收紧功能描述至实际范围:移除案件信息更新、复杂案件匹配、日程提醒等未实现功能
- frontmatter description 去除 Playwright 硆名实现细节
- CHANGELOG 措辞修正:去除"Claude NLP"和"替代正则解析"的说法,正则规则仍在
sms-patterns.json中配合使用 - 新增 Playwright 安装指引(CLI 和 MCP 两种方式)
- 短信类型分类表简化,仅保留展示解析结果
[1.1.0] - 2026-04-04
改进
- 下载策略改为三层回退:curl API 直连(优先)→ Playwright CLI → Playwright MCP
- 实测确认 zxfw 后端 API(
getWsListBySdbhNew)可无头调用,无需浏览器即可下载全部文书 - 将 API 端点、请求格式、响应字段写入
references/sms-patterns.json,后续同类型短信直接走 curl - 去除 SKILL.md 中"执行者"写法,保持 agent 无关性
- frontmatter 规范化:description 改为第三人称,新增 license 字段(MIT),去除关键词堆砌
- 触发方式从独立章节合并到功能概述,用示例替代关键词列表
- 归档机制从 Markdown 改为结构化 JSON(
archive/YYYYMMDD_HHMMSS_{案号后4位}.json),记录短信原文、解析结果、下载参数、归档路径 - 目录结构规范化:
config/sms-patterns.json移入references/,新增archive/.gitkeep - 补充 CHANGELOG 1.0.0 的设计缘由和思路演进
- 新增 LICENSE.txt(MIT)
新增
- 多平台送达链接支持:除 zxfw 外,新增
sd.gdems.com(广东电子送达)和jysd.10102368.com(集约送达)的链接识别 - 平台分级下载策略:zxfw 走 curl API 直连,gdems/jysd 无公开 API,直接回退到浏览器自动化
sms-patterns.json新增download_strategy字段,区分api_first(有 API)和browser_only(需浏览器)- 基础文书解析:下载后提取 PDF 首页文本,快速识别传票(开庭时间/地点)、通知书(缴费期限)、起诉状(案由/当事人)等关键信息
- 归档格式拆分到
references/archive-format.md,SKILL.md 只保留引用 - 收紧功能描述至实际范围:移除案件信息更新、复杂案件匹配等未实现功能
[1.0.0] - 2026-04-04
设计缘由
- 律师日常频繁收到法院送达短信(传票、通知书等),需要手动从全国法院送达平台下载文书并归档到案件目录
- 手动操作流程繁琐:复制链接 → 打开网页 → 下载 PDF → 重命名 → 移入目录 → 更新案件记录
- 参考 FachuanHybridSystem 的短信解析设计思路,将其核心逻辑转化为 Skill 格式,结合 agent 的自然语言理解能力与结构化正则规则(
references/sms-patterns.json)进行短信解析
思路演进
1. 调研阶段:发现 FachuanHybridSystem 已实现短信解析 → 下载 → 归档的完整流水线 2. 适配阶段:将 Python/Django 服务架构映射为 Skill 工作流(agent 自然语言理解 + 结构化规则),无需部署额外服务 3. 当前阶段:以 JSON 配置参考文件替代硬编码规则,保持技能的可维护性和可扩展性
新增
- 法院短信智能分类(文书送达 / 信息通知 / 立案通知)
- 案号自动提取,支持多种标准格式(圆括号、方括号、六角括号)
- 当事人名称提取(公司名、诉讼对峙模式、角色前缀)
- 从 zxfw.court.gov.cn 链接中提取下载参数(qdbh、sdbh、sdsin)
- 三级案件匹配策略(案号精确 → 当事人双向 → 特征筛选)
- Playwright 两级回退下载(API 拦截 → 页面点击)
- 文书自动重命名并归档到案件目录
- 短信原文归档到 archive/
- 解析规则可配置化(
references/sms-patterns.json)
致谢
本技能参考了 FachuanHybridSystem(法穿) 中短信解析模块的设计思路和解析规则(非直接复制代码)。详见 `references/ATTRIBUTION.md`。
{
"_doc": "用户偏好配置示例。复制为 user-preferences.json 后根据个人习惯修改。",
"_usage": "court-sms skill 在第五步 PDF 后处理时读取此文件,获取用户的合并和重命名偏好。",
"merge_strategy": "per_evidence",
"merge_options": {
"per_evidence": {
"description": "按单个证据编号分别合并。证据3 有 10 个拆分 → 合并为一个证据3.pdf,其他证据不动",
"naming": "保留原始证据文件名中的标题部分,如「证据3:打印截图.pdf」"
},
"unified": {
"description": "将证据目录 + 所有证据合并为一个原告证据.pdf,并添加 PDF 书签方便跳转",
"output_name": "原告证据.pdf",
"bookmarks": {
"enabled": true,
"format": "简洁版:证据目录、证据1:仲裁申请书、证据2:劳动合同、…",
"naming_rule": "书签名 = 证据编号 + 冒号 + 证据标题(去除当事人和日期后缀)"
}
}
},
"rename": {
"enabled": true,
"description": "精简文件名:去掉括号内当事人信息、日期后缀等冗余内容",
"strip_patterns": [
"([^)]+)",
"_\\d{8}收",
"(合并)",
"(素)-",
"(自贸法庭)",
"(自贸)"
],
"special_mappings": {
"起诉状(素)": "起诉状(要素式)",
"开庭传票": "传票"
}
}
}
MIT License
Copyright (c) 2026 杨卫薪律师(微信ywxlaw)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
---
本技能参考了 FachuanHybridSystem(法穿)项目的设计思路,详见 references/ATTRIBUTION.md。
内部归档格式
每次处理一条短信后,在 archive/ 下创建一条 JSON 记录,不保存文书本身(文书归档到案件目录)。
文件路径
archive/YYYYMMDD_HHMMSS_{案号后4位}.json
JSON 结构
{
"id": "20260404_143025_1234",
"timestamp": "2026-04-04T14:30:25+08:00",
"sms_raw": "【xx市人民法院】张三,您好!您有(2025)苏0981民初1234号案件文书送达,请点击链接查收:https://zxfw.court.gov.cn/...",
"parsed": {
"type": "document_delivery",
"case_number": "(2025)苏0981民初1234号",
"parties": ["张三", "xx有限公司"],
"court": "xx市人民法院"
},
"download": {
"source_url": "https://zxfw.court.gov.cn/zxfw/#/pagesAjkj/app/wssd/index?qdbh=XX&sdbh=XX&sdsin=XX",
"params": { "qdbh": "XX", "sdbh": "XX", "sdsin": "XX" },
"method": "curl",
"status": "success",
"document_title": "受理通知书",
"api_response": {
"c_fymc": "苏州工业园区人民法院",
"c_fybh": "1275",
"dt_cjsj": "2026-03-18T07:44:00.000+00:00",
"documents": [
{
"c_wsmc": "传票(东沙湖法庭)",
"c_wsbh": "ecb8fe64e4834804b50ea0f9257327e0",
"dt_cjsj": "2026-03-18T07:44:00.000+00:00"
}
]
}
},
"document": {
"type": "一审判决书",
"sent_at": "2026-04-08T10:00:00+08:00",
"received_at": "2026-04-08T14:30:00+08:00",
"appeal_deadline": "2026-04-23T23:59:59+08:00",
"appeal_days_remaining": 15
},
"archive": {
"matched_case": "260101 张三与李四合同纠纷",
"target_path": "260101 张三与李四合同纠纷/受理通知书(张三与李四合同纠纷)_20260404收.pdf",
"summary": "传票:2025年4月15日 14:30 第3法庭开庭"
}
}字段说明
| 字段 | 必需 | 说明 |
|---|---|---|
id | 是 | 归档唯一标识,即文件名(不含扩展名) |
timestamp | 是 | ISO 8601 格式的处理时间 |
sms_raw | 是 | 短信原文,完整保留 |
parsed.type | 是 | 短信类型:document_delivery / filing_notification / info_notification |
parsed.case_number | 否 | 提取到的案号,未提取到时为 null |
parsed.parties | 否 | 提取到的当事人列表 |
parsed.court | 否 | 提取到的法院名称 |
parsed.sent_at | 否 | 法院发送时间,从短信或送达平台提取 |
parsed.received_at | 否 | 用户收到时间(如有) |
download.source_url | 否 | 原始下载链接 |
download.params | 否 | 从 URL 提取的参数(如 qdbh/sdbh/sdsin) |
download.method | 否 | 实际使用的下载方式:curl / cli / mcp / manual / null(无下载链接) |
download.status | 是 | 下载状态:success / failed / manual / skipped |
download.api_response | 否 | API 完整响应,包含 c_fymc(法院名称)、c_fybh(法院编号)、dt_cjsj(送达时间)、documents 数组(每份文书详情) |
download.api_response.c_fymc | 否 | 法院名称(来自 API) |
download.api_response.c_fybh | 否 | 法院编号 |
download.api_response.dt_cjsj | 否 | 送达记录创建时间(ISO 8601),作为 sent_at 来源 |
download.api_response.documents[].c_wsmc | 否 | 文书名称 |
download.api_response.documents[].c_wsbh | 否 | 文书编号(UUID) |
download.api_response.documents[].dt_cjsj | 否 | 单份文书的送达时间 |
document.type | 否 | 文书类型:判决书/裁定书/调解书等(从 PDF 解析) |
document.sent_at | 否 | 法院发送时间(送达平台记录) |
document.received_at | 否 | 用户收到时间(手机短信网关时间) |
document.appeal_deadline | 否 | 上诉截止日期(根据案件类型计算) |
document.appeal_days_remaining | 否 | 剩余上诉天数 |
archive.matched_case | 否 | 匹配到的案件目录名 |
archive.target_path | 否 | 文书最终归档的相对路径 |
归属声明与致谢
参考项目
本技能(court-sms)在开发过程中,使用 AI 参考了以下开源项目的思路和规则:
FachuanHybridSystem(法穿AI案件管理系统)
- 项目地址:https://github.com/Lawyer-ray/FachuanHybridSystem
- 许可证:PolyForm Noncommercial License 1.0.0 (附特别许可)
- 版权所有:(C) 2025-2099 法穿
具体参考内容
本技能参考了 FachuanHybridSystem 中以下模块的设计思路和解析规则(非直接复制代码):
1. 短信解析服务 (backend/apps/automation/services/sms/sms_parser_service.py)
- 短信类型分类逻辑(文书送达 / 信息通知 / 立案通知)
- zxfw.court.gov.cn 下载链接正则匹配规则
- 同构异域名正则更新(从硬编码域名改为通用主机匹配,通过 URL 路径特征识别平台)
- 案号提取正则模式
- 当事人名称提取策略(公司名模式、对峙模式、角色前缀模式)
- 当事人排除关键词列表
- 司法送达网(SFDW)链接正则和验证码提取规则
2. 案件匹配算法 (backend/apps/automation/services/sms/case_matcher.py)
- 三级匹配策略的设计思路(案号精确 → 当事人双向 → 特征筛选)
3. 文书重命名逻辑 (backend/apps/automation/services/sms/document_renamer.py)
- 已知文书标题映射表
- 文件命名格式:
{title}({case_name})_{YYYYMMDD}收.pdf
4. zxfw 下载策略 (backend/apps/automation/services/scraper/scrapers/court_document/zxfw_scraper.py)
- 多级下载回退策略的架构设计
- API 拦截与页面操作结合的思路
5. 司法送达网下载策略 (backend/apps/automation/services/scraper/scrapers/court_document/sfdw_scraper.py)
- 纯 Playwright 下载流程(TDHCryptoUtil 加密导致无法使用 HTTP API)
- 验证码双模式策略:手机尾号后6位优先 + 短信验证码回退
- Vue app.checkYzm() → wsList → downloadFile() 页面交互流程
实现差异
本技能并未直接复制 FachuanHybridSystem 的代码,而是将其核心逻辑重新实现为 Claude Code Skill 格式:
- 原项目:Python / Django 服务,使用 Ollama LLM + ddddocr + Playwright
- 本技能:Claude Code Skill,利用 Claude NLP 能力 + Playwright MCP
- 无代码复用:所有解析逻辑由 Claude 自然语言理解完成,配置规则以 JSON 参考
致谢
感谢法穿团队开源的法律科技实践成果,为社区提供了宝贵的设计参考。
归档汇报格式
汇报结构
汇报分四部分,按顺序输出:
1. 归档完成 — 确认信息 2. 文书清单 — 所有已归档文件 3. 特别注意 — 仅当包含传票时显示开庭信息 4. 上诉期限 — 仅当文书类型为一审判决书且能计算上诉期限时显示
---
模板
✅ 文书归档完成:
- 案号:(2025)苏0981民初1234号
- 法院:xx市人民法院
- 当事人:原告 xx有限公司 / 被告 张三
- 案由:合同纠纷
- 文件数:N 份
- 归档位置:{案件目录}/
文书清单:
1. 传票(东沙湖法庭) 传票
2. 应诉通知书 通知书
3. 起诉状 起诉状
4. 证据1:xxx 证据
...
⚠️ 已收到传票,请注意:
- 开庭时间:2025年4月15日(周二)14:30
- 开庭地点:xx市人民法院 第3法庭
- 审理程序:简易程序
⏰ 上诉期限提醒:
- 文书类型:一审判决书
- 送达时间:2026年4月8日
- 上诉截止:2026年4月23日(剩余15天)---
各部分规则
1. 归档完成
必填字段:
| 字段 | 来源 |
|---|---|
| 案号 | 短信解析 或 文书提取 |
| 法院 | 短信解析 或 API 返回 c_fymc |
| 当事人 | 文书提取(起诉状/传票),非短信接收人 |
| 案由 | 文书提取(起诉状/传票) |
| 文件数 | 实际归档数量 |
| 归档位置 | 相对路径 |
当事人提取优先级:文书内容 > API 返回 > 短信文本。短信中的姓名(如"xx,您好")仅为接收人,不作为案件当事人。
2. 文书清单
列出所有已归档文件,每行格式:
{序号}. {文书名} {类型标签}类型标签来自 sms-patterns.json → document_titles 映射,未匹配的标注为"其他"。
3. 特别注意(仅传票)
触发条件:文书清单中包含标题含"传票"的文件。
从传票 PDF 首页文本提取以下字段(正则匹配):
| 字段 | 提取方式 |
|---|---|
| 开庭时间 | 匹配 应到时间 附近的日期时间 |
| 开庭地点 | 匹配 应到处所 附近的文本 |
| 审理程序 | 从应诉通知书中匹配"小额诉讼/简易程序/普通程序" |
日期格式化:原始日期(如 2026年05月07日 09:30)应追加星期几,方便用户快速判断是否为工作日。
提醒语气:使用 ⚠️ 标记,加粗关键日期时间,确保用户不会遗漏。
4. 上诉期限(仅判决书/裁定书)
触发条件:文书清单中包含"判决书"或"裁定书"且能提取到送达时间。
上诉期限计算规则:
| 案件类型 | 上诉期限 |
|---|---|
| 民事一审判决 | 送达后15天 |
| 民事裁定 | 送达后10天 |
| 行政判决 | 送达后15天 |
| 刑事判决 | 送达后10天 |
| 刑事裁定 | 送达后5天 |
日期格式化:展示为 X月X日 格式,追加星期几。
剩余天数计算:截止日期 - 当前日期
---
归档失败时的汇报
⚠️ 文书归档部分完成:
- 案号:(2025)苏0981民初1234号
- 法院:xx市人民法院
- 成功:N 份
- 失败:N 份
失败的文书:
- xxx.pdf(原因:下载超时)
请手动访问以下链接下载失败文书:
{原始链接}{
"download_link_patterns": [
{
"domain": "zxfw.court.gov.cn",
"canonical_domain": "zxfw.court.gov.cn",
"description": "全国法院统一送达平台(最常见)",
"pattern": "https?://[^\\s/]+/zxfw/#/pagesAjkj/app/wssd/index\\?[^\\s]*",
"required_params": ["qdbh", "sdbh", "sdsin"],
"param_extract": "从 URL query string 中提取 qdbh、sdbh、sdsin 三个参数值",
"download_strategy": "api_first",
"api": {
"endpoint": "https://zxfw.court.gov.cn/yzw/yzw-zxfw-sdfw/api/v1/sdfw/getWsListBySdbhNew",
"method": "POST",
"content_type": "application/json",
"request_body": { "qdbh": "{全局编号}", "sdbh": "{送达编号}", "sdsin": "{送达签名}" },
"response_fields": {
"court_name": "data[].c_fymc",
"court_id": "data[].c_fybh",
"document_name": "data[].c_wsmc",
"document_id": "data[].c_wsbh",
"download_url": "data[].wjlj",
"file_format": "data[].c_wjgs",
"create_time": "data[].dt_cjsj"
},
"download_method": "curl -sL -o \"{filename}\" \"{wjlj}\"",
"notes": "OSS 签名 URL 有过期时间(约1小时),获取后应尽快下载。无需浏览器,直接 curl 即可。dt_cjsj 为送达记录创建时间,可作为 sent_at 使用。"
}
},
{
"domain": "sd.gdems.com",
"canonical_domain": "sd.gdems.com",
"description": "广东法院电子送达平台(限广东地区)",
"pattern": "https?://[^\\s/]+/v3/dzsd/[a-zA-Z0-9]+",
"required_params": [],
"param_extract": "从 URL 路径末尾提取送达标识码",
"download_strategy": "browser_only",
"api": null,
"notes": "无公开 API,需通过浏览器打开页面后手动或 Playwright 自动化下载。页面可能需要输入验证码或手机号验证。"
},
{
"domain": "jysd.10102368.com",
"canonical_domain": "jysd.10102368.com",
"description": "集约送达平台(邮政集约送达服务)",
"pattern": "https?://[^\\s/]+/sd\\?key=[a-zA-Z0-9_\\-]+",
"required_params": ["key"],
"param_extract": "从 URL query string 中提取 key 参数值",
"download_strategy": "browser_only",
"api": null,
"notes": "无公开 API,需通过浏览器打开页面后下载。部分链接可能需要短信验证码验证身份。"
},
{
"domain": "dzsd.hbfy.gov.cn",
"canonical_domain": "dzsd.hbfy.gov.cn",
"description": "湖北电子送达平台(限湖北地区法院)",
"pattern": "https?://[^\\s/]+/(?:hb/msg=[a-zA-Z0-9]+|sfsddz\\b)",
"required_params": [],
"param_extract": "免账号模式:从 URL 路径提取 msg 参数值;账号模式:从短信正文提取账号和默认密码",
"download_strategy": "browser_only",
"api": {
"public_mode": {
"endpoint": "http://dzsd.hbfy.gov.cn/delimobile/tDeliSms/findSmsInfo",
"method": "POST",
"content_type": "application/json",
"request_body": { "msg": "{msg参数值}", "code": "{验证码(如需)}", "uuid": "{验证码UUID(如需)}" },
"response_fields": {
"need_captcha": "data.isNeedCaptcha",
"doc_list": "data.docList",
"doc_name": "data.docList[].docName",
"download_path": "data.docList[].downloadPath",
"pdf_path": "data.docList[].pdfPath"
},
"captcha_endpoint": "http://dzsd.hbfy.gov.cn/delimobile/loginCaptcha",
"notes": "免账号模式有 HTTP API,但可能需要验证码(OCR)。验证码获取:POST loginCaptcha,返回 data.uuid + data.img(base64)。"
},
"account_mode": {
"credential_patterns": {
"account": "账号\\s*([0-9]{15,20})",
"password": "默认密码[::]\\s*([0-9A-Za-z]+)"
},
"notes": "账号模式需从短信正文提取账号和默认密码,登录需要验证码 OCR,建议使用 Playwright MCP 浏览器自动化。"
}
},
"notes": "湖北电子送达平台支持两种模式:1)免账号模式(短信含 /hb/msg= 链接)可直接通过 HTTP API 查询文书;2)账号模式(短信含 /sfsddz 入口)需登录后下载。两种模式都可能需要验证码。建议优先尝试免账号 HTTP API,失败后降级到 Playwright MCP。"
},
{
"domain": "sfpt.cdfy12368.gov.cn",
"alias_domains": ["171.106.48.55:28083"],
"description": "司法送达网(全国法院司法送达平台)",
"pattern": "https?://[^\\s/]+/sfsdw//r/[a-zA-Z0-9]+",
"required_params": [],
"param_extract": "从短信正文提取验证码(验证码[::]\\s*(\\w{4,6})),或使用案件关联律师手机号后6位作为验证码。无 URL 参数。",
"download_strategy": "browser_only",
"api": null,
"verification": {
"modes": [
{
"type": "phone_tail",
"description": "手机尾号后6位验证(优先)",
"source": "从案件分配信息中获取律师手机号,取后6位"
},
{
"type": "sms_code",
"pattern": "验证码[::]\\s*(\\w{4,6})",
"description": "从短信正文中提取验证码"
}
]
},
"browser_flow": {
"description": "纯 Playwright 流程(无 API 可用,所有 POST 请求经 TDHCryptoUtil 加密)",
"steps": [
"browser_navigate → 打开短信中的 SFDW 链接",
"页面自动重定向到 pc.html?tdhParams=xxx",
"browser_snapshot → 查看验证码输入页面(input#checkCode)",
"输入验证码(优先手机尾号后6位,其次短信验证码)",
"browser_evaluate → 调用 Vue app.checkYzm() 触发验证",
"验证通过后 browser_evaluate → 获取 app.$data.wsList(文书列表)",
"遍历 wsList,逐个调用 downloadFile(app, ws) 下载文书",
"保存到 /tmp/court-sms-staging/"
]
},
"notes": "司法送达网所有 POST 请求使用 TDHCryptoUtil 加密,无法通过 HTTP API 下载,只能使用纯 Playwright 流程。广西实例(171.106.48.55:28083)路由到同一平台,下载流程相同。wsList 每项包含 wjmc(文件名)、wjgs(格式)、sdjzwjid(文件ID)。"
}
],
"case_number_pattern": "[((〔\\[]\\d{4}[))\\]〕]\\s*[\\u4e00-\\u9fa5]{1,10}\\d+[\\u4e00-\\u9fa5]{1,5}\\d+号?",
"case_number_examples": [
"(2025)苏0981民初1234号",
"(2024)粤0604执保5678号",
"〔2025〕京0105民初901号"
],
"sms_type_keywords": {
"document_delivery": ["文书送达", "请查收", "查收文书", "下载文书", "送达文书", "案件文书", "受理通知书", "缴费通知书", "告知书", "廉政监督卡"],
"filing_notification": ["已立案", "立案通知", "受理案件", "案件受理"],
"info_notification": ["开庭时间", "延期", "取消", "变更", "提醒"]
},
"document_titles": {
"受理案件通知书": "受理案件通知书",
"应诉通知书": "应诉通知书",
"传票": "传票",
"开庭传票": "传票",
"举证通知书": "举证通知书",
"判决书": "判决书",
"民事判决书": "一审判决书",
"裁定书": "裁定书",
"调解书": "调解书",
"执行通知书": "执行通知书",
"诉讼权利义务告知书": "诉讼权利义务告知书",
"诉讼费用交费通知书": "诉讼费用交费通知书",
"廉政监督卡": "廉政监督卡",
"诉讼材料提交告知书": "诉讼材料提交告知书",
"出庭通知书": "出庭通知书",
"合议庭组成人员通知书": "合议庭组成人员通知书",
"举证期限通知书": "举证期限通知书",
"转换程序通知书": "转换程序通知书",
"参加诉讼通知书": "参加诉讼通知书"
},
"sent_time_extraction": {
"_doc": "送达时间提取规则,用于计算上诉期限等关键日期",
"api_field": "dt_cjsj",
"api_field_description": "送达平台 API 响应中的创建时间字段,即送达记录创建时间(北京时间)",
"patterns": [
{
"type": "sms_gateway",
"description": "短信网关时间(部分手机短信显示)",
"regex": "(?:发送|时间)[::]?\\s*(\\d{4}[-/年]\\d{1,2}[-/月]\\d{1,2}[日]?\\s+\\d{1,2}[时:]?\\d{0,2})",
"format": "yyyy-MM-dd HH:mm"
}
]
},
"appeal_calculation": {
"_doc": "上诉期限计算规则,不同案件类型上诉期限不同",
"first_instance_civil_judgment": {
"deadline_days": 15,
"description": "民事一审判决:送达后15天",
"document_types": ["一审判决书", "民事判决书", "判决书"]
},
"first_instance_civil_ruling": {
"deadline_days": 10,
"description": "民事裁定:送达后10天",
"document_types": ["裁定书"]
},
"first_instance_administrative": {
"deadline_days": 15,
"description": "行政判决:送达后15天",
"document_types": ["行政判决书"]
},
"first_instance_criminal_judgment": {
"deadline_days": 10,
"description": "刑事判决:送达后10天",
"document_types": ["刑事判决书"]
},
"first_instance_criminal_ruling": {
"deadline_days": 5,
"description": "刑事裁定:送达后5天",
"document_types": ["刑事裁定书"]
}
},
"party_extraction": {
"company_patterns": [
"[\\u4e00-\\u9fa5]{2,30}(?:有限责任公司|股份有限公司)",
"[\\u4e00-\\u9fa5]{2,20}有限公司",
"[\\u4e00-\\u9fa5]{2,20}(?:集团|企业)"
],
"versus_patterns": [
"{company}与{company}",
"{company}与{person}",
"{person}与{company}",
"{person}与{person}",
"{person}诉{person}",
"{person}诉{company}"
],
"role_prefixes": ["原告", "被告", "申请人", "被申请人", "上诉人", "被上诉人", "申请执行人", "被执行人", "第三人"],
"exclude_keywords": [
"法院", "人民法院", "书记员", "法官", "审判员", "执行员",
"系统", "平台", "服务", "通知", "短信", "案件", "纠纷", "争议",
"你好", "收到", "查收", "下载", "链接", "请于", "联系"
]
},
"rename_fallback": {
"_doc": "当文书标题无法识别时的回退策略",
"strategy": "use_original_filename",
"description": "优先使用下载时的原始文件名(去除扩展名),而非默认为'未知文书'",
"fallback_title": "未知文书"
},
"file_naming": {
"format": "{title}({case_name})_{YYYYMMDD}收.pdf",
"example": "受理通知书(张三与李四合同纠纷)_20260404收.pdf",
"target_directory": null,
"conflict_suffix": "_2"
},
"post_processing": {
"_doc": "PDF 后处理:检测拆分文件并合并 + 精简文件名。不默认启用,仅在检测到拆分时提示用户。合并偏好见 user-preferences.json。",
"trigger": {
"description": "扫描归档目录中的 PDF 文件名,按文书类型分组。任一组文件数 > 3 时触发提示。",
"group_rules": [
"证据类:文件名以'证据'开头,按编号分组(证据1、证据2、证据3…)",
"其他文书:按文书类型分组(传票、起诉状、应诉通知书…)"
],
"threshold": 3
},
"preferences_file": "config/user-preferences.json",
"preferences_example": "config/user-preferences.example.json",
"default_merge_strategy": "per_evidence",
"user_prompt": {
"description": "检测到拆分文件时,使用 AskUserQuestion 提示用户",
"options": [
"是,合并所有 — 按偏好设置合并并重命名",
"让我选择 — 逐个确认哪些需要合并",
"跳过 — 不处理"
]
}
}
}