court-sms について
court-sms は、裁判所からの送達通知や文書リンクを処理するスキルです。事件記録を扱う担当者向けに、通知の解析、送達プラットフォームの識別、文書のダウンロードと保管を行い、文書情報や期限確認の状況を整理します。
主な機能
- 01送達通知とリンクの解析
- 02複数の裁判所送達プラットフォームの識別
- 03訴訟文書のダウンロードと保管
- 04文書の先頭ページから要点を抽出
- 05送達証拠と期限確認状況の確認
活用シーン
- 01裁判所通知から送達文書を取得
- 02事件ごとの PDF 整理と保管
- 03召喚状から期日の情報を抽出
- 04未確認の控訴期限事項を確認
MCP 対応
Playwright MCP を設定すると、ブラウザー操作で一部の送達プラットフォームにアクセスし、文書をダウンロードできます。全国法院统一送达平台などでは、API またはコマンドラインによる取得にも対応します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ cat-xierluo/ legal-skills --skill court-smsインストール後、Claude Code で/court-smsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
CHANGELOG.mdLICENSE.txtconfig/user-preferences.example.jsonreferences/archive-format.mdATTRIBUTION.mdreport-format.mdservice-and-deadlines.mdsms-patterns.jsonscripts/check_service_evidence.pytest_service_evidence.py詳細
裁判所のSMS識別と文書ダウンロード
プライバシーとコンプライアンスに関する説明(透明性のための通知であり、実行を妨げるものではありません)
このスキルが処理するのは裁判所の訴訟文書と送達SMSです。内容には事件番号、当事者、裁判所情報、送達日時などの機微な訴訟データが含まれ、一部には顧客の機密情報や個人情報が含まれる場合もあります。使用することで、以下の方法で本スキルがデータを処理することに同意したものとみなされます。
- ダウンロードした文書とアーカイブ記録はローカルファイルシステム(案件ディレクトリとスキル内の
archive/)に保存されます。保存先にアクセスできるのがご本人のみであることを確認し、公開リポジトリへの登録やサードパーティサービスとの同期は行わないでください。 - ログイン認証情報(アカウント、パスワード、認証コード)が必要な手順では、該当する情報を含むSMSを貼り付けると、操作を意識せずにダウンロードできるよう、既定で自動入力されます。
- 案件ディレクトリの新規作成と内部アーカイブ記録の書き込みは、手順に従って自動的に実行され、都度確認は不要です。
機能概要
裁判所からのSMSを処理する一連の手順です。SMSを貼り付ける → 内容を解析する → 案件を照合する → 文書をダウンロードする → アーカイブに保存する。
2種類の起動方法に対応しています。
方法1:SMS本文を貼り付ける
收到法院短信,内容如下:
【xx市人民法院】张三,您好!您有(2025)苏0981民初1234号案件文书送达,请点击链接查收:https://zxfw.court.gov.cn/zxfw/#/pagesAjkj/app/wssd/index?qdbh=DEMO1&sdbh=DEMO2&sdsin=DEMO3
方法2:送達リンクを直接送信する
ユーザーが送達リンクだけを直接貼り付ける場合(SMS全文ではない場合)は、SMS本文の解析を省略し、URLから qdbh、sdbh、sdsin パラメーターを直接抽出して、3番目の手順のダウンロード処理に進みます。
https://zxfw.court.gov.cn/zxfw/#/pagesAjkj/app/wssd/index?qdbh=xxx&sdbh=xxx&sdsin=xxx
SMSの種類
| 種類 | 特徴 | ダウンロードリンクを含む | 処理方法 |
|---|---|---|---|
| 文書送達 | 送達プラットフォームのリンクと事件番号を含む | はい | 文書をダウンロードし、案件ディレクトリにアーカイブします |
| 立件通知 | 「立件済み」などのキーワードを含む | 含む場合があります | 解析結果を表示します |
| 情報通知 | リンクがなく、情報のみ | いいえ | 解析結果を表示します |
対応する送達プラットフォーム:zxfw.court.gov.cn(全国)、sd.gdems.com(広東)、jysd.10102368.com(集約送達)、dzsd.hbfy.gov.cn(湖北)、sfpt.cdfy12368.gov.cn(司法送達ネットワーク)。同じプラットフォームでも異なるドメイン名を使用する場合があります(同じ構造で異なるドメイン名)。URLパスの特徴からプラットフォームを識別します。詳しくは references/sms-patterns.json を参照してください。
ワークフロー(4ステップ)
第1ステップ:入力の解析
- 解析の参考として
references/sms-patterns.jsonを読み込みます - 入力の種類を判定します:
- SMS全文:裁判所名の署名(例:
【xx法院】)+本文+リンクを含む場合 → 全文解析の手順に進みます - リンクのみ:ユーザーが送達URLを直接送信した場合(例:
https://zxfw.court.gov.cn/...?qdbh=xxx&sdbh=xxx&sdsin=xxx)→ SMS本文の解析を省略し、URLからパラメーターを直接抽出して、ステップ3のダウンロードに進みます。事件番号や当事者などの情報は、文書のダウンロード後に文書の内容から抽出します。
- SMS全文:裁判所名の署名(例:
- ユーザーが貼り付けたSMS本文を分析します(リンクのみの入力ではこの手順を省略します)。
a) SMSの分類:キーワードに基づいて種類を判定します
- 文書送達:zxfw.court.gov.cn のリンクを含む
- 立件通知:「立件済み」「立件通知」などを含む
- 情報通知:その他
b) 事件番号の抽出:正規表現 [((〔[]\d{4}[))〕]] を使用して、標準形式の事件番号に一致させます
標準的な事件番号の形式例:
(2025)苏0981民初1234号(2024)粤0604执保5678号〔2025〕京0105民初901号
c) 当事者の抽出:SMS本文から暫定的に識別し、最終的には文書の内容に基づいて判断します
- 注意:SMS内の呼びかけ(例:「張三さん、こんにちは」)はSMSの受信者を指すだけであり、案件の当事者として扱いません
- 会社名:
xx有限责任公司、xx有限公司、xx股份有限公司 - 訴訟当事者の表記:
A与B、A诉B、原告A 被告B - 役割の接頭辞:
原告:xxx、被告:xxxなど - 文書のダウンロード後は、訴状や召喚状に記載された当事者情報を正とし、SMS段階での暫定的な判断を置き換えます
d) ダウンロードリンクの抽出:SMS内の送達プラットフォームのリンクを識別し、パラメーターを抽出します
| プラットフォーム | ドメイン | ダウンロード方法 | 抽出パラメーター |
|---|---|---|---|
| 全国法院統一送達プラットフォーム | 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桁/SMS認証コード) |
e) 送達証拠の確認(P0):送達と期限のルールを読み、送信、受信、生成、法律上の送達を区別します。
- zxfw の
getWsListBySdbhNewは、検証済みのレスポンスにdt_cjsjを含みません。このフィールドを捏造してはなりません。他のインターフェースに作成日時があっても、自動的に送達日時として扱うことはできません。 - 「文書+送達を受ける者」ごとに、適用の根拠、送達証明書、またはシステムの送信成功/到達の証拠を照合します。QRコードの生成日時、文書の日付、通常のSMSの日時は手がかりとしてのみ記録し、同じ一括送信に含まれる別の文書の日付を起算日として使用してはなりません。
- 参考フォーマットに従って証拠を整理し、
python3 scripts/check_service_evidence.py /private/path/service-evidence.jsonを実行します。confirmedのみが出力された場合に限り、期限ルールの確認に進みます。チェッカーは構造と一貫性のみを確認するもので、原本の証拠確認に代わるものではありません。 - 不明、矛盾、またはチェック失敗の場合は、
service.served_on=nullとし、「送達日時の確認待ち」と不足情報を表示して、ダウンロードとアーカイブを続行します。確定した期限やカウントダウンを出力してはなりません。
f) ダウンロード中は Python の heredoc を避ける:一時的な .py ファイルを作成するか、execute_code に切り替える方法を優先してください。python3 <<'PY' の形式は危険なコマンドのルール(pattern key script execution via heredoc)に該当し、実行のたびに承認ダイアログが表示されます。python3 -c(key script execution via -e/-c flag)も同様です。
除外リスト:裁判所名、裁判官名、地名、法律用語などを当事者として抽出してはなりません。詳しくは
sms-patterns.json→party_extraction.exclude_keywordsを参照してください。
出力形式(ユーザーに表示):
📋 短信解析结果:
- 类型:文书送达
- 案号:(2025)苏0981民初1234号
- 当事人:张三、xx有限公司
- 下载链接:已提取(zxfw.court.gov.cn)
第2ステップ:アーカイブ先ディレクトリの決定
- 現在の作業ディレクトリをスキャンします:ディレクトリ構成を識別し、SMSの事件番号または当事者に一致する案件ディレクトリを探します
- アーカイブ用サブディレクトリを検索します:一致した案件ディレクトリ内で、裁判所の文書に関連するサブディレクトリ(例:
08*、法院送达、courtなど)を探します - 一致する案件が見つからない場合は、ユーザーに確認せず、現在の作業ディレクトリ(プロジェクトのルートディレクトリ)に
{案号} {当事人与案由}/を自動作成します
第3ステップ:文書のダウンロード
プラットフォームの判定:ステップ1で識別したリンクのドメインに基づき、ダウンロード方法を選択します。
zxfw.court.gov.cn→ 方法1(API へ直接アクセス)→ 方法2 → 方法3sd.gdems.comまたはjysd.10102368.com→ 方法1を省略し、方法2 → 方法3に直接進みますdzsd.hbfy.gov.cn→ 湖北専用の手順(下記参照)sfpt.cdfy12368.gov.cn(広西の事例171.106.48.55:28083を含む)→ SFDW 専用の手順(下記参照)- 不明なドメインでもURLパスが既知のプラットフォームの特徴と一致する場合 → パスに基づいてプラットフォームを識別します(同じ構造で異なるドメイン名にも対応)
- まったく識別できない場合 → リンクの情報をユーザーに提示してもらいます
⛔ フォールバックに関する厳守事項:厳密に逐次実行し、並列実行は禁止です。現在の方法で成功したらそこで停止し、絶対にフォールバックしません。「二重の安全策」として複数の方法を並行して試すことは禁止です。
依存関係
| 依存関係 | 用途 | 対象の方法 | インストール方法 |
|---|---|---|---|
| Python 3.8+ | 送達証拠のチェック(標準ライブラリのため、pip は不要) | 期限確認の前 | macOS/Linux では既存の python3 を使用します。ない場合は、インストール後に期限確認を再試行するよう案内します |
curl | API ダウンロード | 方法1 | macOS/Linux に標準でインストール済み |
jq | JSON 解析(任意) | 方法1 | brew install jq |
| Playwright | ブラウザー自動化 | 方法2/3 | 下記参照 |
Playwright のインストール手順(方法2/3のみ必要):
# 方案二: 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 プラットフォームでは、方法1で curl から API を直接呼び出すため、ブラウザーは不要です。gdems/jysd プラットフォーム、または方法1が失敗した後に限り、方法2/3が必要です。方法1の実行中にブラウザーを同時に開くことは禁止です。
方法一 — 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)
湖北電子送達プラットフォームには2種類の経路があり、URL 形式に応じて自動的に選択します:
経路一:アカウント不要モード(URL に /hb/msg=xxx が含まれる場合)
- URL から
msgパラメーターの値を抽出します - 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
done
- 認証コードが必要な場合、または HTTP が失敗した場合は、Playwright MCP(方法三)に切り替えます
経路二:アカウントモード(URL に /sfsddz が含まれる場合)
- SMS 本文から認証情報を抽出します:
- アカウント:
账号\s*(\d{15,20})に一致する文字列 - デフォルトパスワード:
默认密码[::]\s*([0-9A-Za-z]+)に一致する文字列
- アカウント:
- ブラウザーの自動化(Playwright MCP)が必要です。ログインページには認証コードがあります
- ログイン後、受領待ち/受領済み/有効期限切れの文書一覧を順に確認し、1件ずつダウンロードします
ヒント:湖北プラットフォームでは、どちらのモードでも認証コードが求められる場合があります。アカウント不要モードでは HTTP API を優先して試し、アカウントモードではユーザーにリンクを手動で開くか、Playwright MCP を使用するよう案内してください。
司法送達ネットワークのダウンロード手順(SFDW - sfpt.cdfy12368.gov.cn)
司法送達ネットワークのすべての POST リクエストは TDHCryptoUtil で暗号化されるため、HTTP API ではダウンロードできず、Playwright のみの手順を使用します。
広西のインスタンス:171.106.48.55:28083 ドメイン配下のリンクは、同じ SFDW プラットフォームにルーティングされるため、ダウンロード手順は同じです。
認証コードの取得(優先順位に従って次の2つを試します):
- 携帯電話番号の下6桁(優先):案件の割り当て情報から弁護士の携帯電話番号を取得し、末尾6桁を認証コードとして入力します
- SMS 認証コード:SMS 本文から抽出します。
验证码[::]\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/
ヒント:携帯電話番号の下6桁による認証に失敗した場合は、SMS に記載された認証コードを確認し、手動で入力するようユーザーに案内してください。wsList の各項目には wjmc(ファイル名)、wjgs(形式)が含まれます。
失敗時のフォールバック
3段階すべてが失敗した場合:
⚠️ 自动下载失败,请手动访问以下链接下载:
{原始链接}
下载后请将文件放到对应案件目录中。
我将为您创建待处理记录。
第四步:归档保存
-
保存先ディレクトリを決定:現在のプロジェクト環境に基づいて自動的に判断し、ユーザーには尋ねません
- 現在のプロジェクトディレクトリをスキャンし、事件番号または当事者に関連する案件ディレクトリを検索します
- 一致する案件ディレクトリが見つかった場合は、裁判所文書用サブディレクトリ(
08*、法院送达、courtなど)を優先して検索します。サブディレクトリがない場合は、案件のルートディレクトリに直接保存します - 一致する案件が見つからない場合は、現在のプロジェクト内に自動作成します:
{案号} {当事人与案由}/ - 保存先ディレクトリが存在しない場合は、自動的に作成します
-
現在の日付を取得:
date "+%Y%m%d" -
文書タイトルを決定:
- API が返したタイトルを優先します
- それ以外の場合は、
sms-patterns.jsonのdocument_titlesマッピングから推定します - 最後に元のファイル名(拡張子を除く)を使用します。それでも特定できない場合は
未知文书を使用します
-
ファイル名を作成:
{title}({case_name})_{YYYYMMDD}收.pdf- 例:
受理通知書(張三と李四の契約紛争)_20260404收.pdf - 使用できない文字を削除します:
< > : " | ? * \ / - 同名ファイルがすでに存在する場合は、接尾辞
_2を追加します
- 例:
-
保存先ディレクトリに移動
-
内部記録を書き込む:今回の処理に関する完全な情報を スキル内部の
archive/ディレクトリ(つまり.claude/skills/court-sms/archive/)に保存します。案件フォルダーには保存しません。形式の詳細はreferences/archive-format.mdを参照してください透明性に関する告知:
archive/には、SMS 原文(sms_raw)、事件番号、当事者、裁判所番号、ダウンロードパラメーター、API レスポンスなど、訴訟に関する機密情報が保存されます。このディレクトリはデフォルトでバージョン管理の対象外です(.gitignoreに追加済み)。公開リポジトリ、サードパーティーのクラウドストレージ、共有ディレクトリに同期しないでください。 -
基本的な文書解析:裁判所の PDF には通常テキストレイヤーが含まれています。1ページ目のテキストを抽出して、文書の種類と重要情報をすばやく識別します
- 召喚状:期日、場所、法廷、事件番号を抽出し、ユーザーに目立つように通知します
- 通知書/告知書:納付期限、立証期限などの重要な日付を抽出します
- 訴状/答弁書:事件の種類、当事者、請求の概要を抽出します
- 判決書/裁定書:本文と末尾の救済に関する告知を読み、審級、手続き、控訴可能性を確認します。タイトルだけで第一審や控訴可能と判断してはいけません
- その他の文書:文書タイトルと裁判所名を表示します
- 複数の文書を一度にダウンロードした場合は、それぞれを解析し、1つのレポートにまとめます
判決書の解説や契約書の審査などの詳細な分析は、このスキルの対象範囲外です。専用の分析スキルを使用してください。
-
控訴期限の確認(P1):送達と期限のルール に従い、タイトルから直接計算しません
- まず送達の証拠を確認してから、該当する文書の救済に関する告知を読み、適用される期間、当事者、例外を確認します。通常の民事訴訟における15日/10日などは候補となるルールにすぎません。保全、終審、小額訴訟、国内に住所を持たない当事者などは、それぞれ個別に判断する必要があります。
- 当年の公式の休日・振替出勤日カレンダーと適用される手続法を確認します。日単位の期間は通常、起算日を数えず、期間中の祝休日は算入します。末日のみルールに従って繰り延べ、振替出勤日は通常の週末として扱いません。
- 送達、控訴可能性、期間のルール、カレンダーのいずれかが未確認の場合は、
deadline_status=pending、appeal_deadline=null、appeal_days_remaining=nullとし、レポートに確認待ちの項目を明記します。控訴権がないことが確認できた場合はnot_applicableを使用します。 - すべての確認が完了した場合に限り、
deadline_status=confirmedを記録し、deadline_basisと対応するserviceの証拠を付記します。複数の文書や送達対象者がいる場合は、それぞれ別に計算します。過去のsent_atを、確認済みの送達日としてそのまま引き継いではいけません。 - 納付や立証などの期限は、元の通知に記載された起算イベントと義務を個別に読み取ります。控訴期限の一覧を流用してはいけません。
-
ユーザーに報告:
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。