name: element-complaint-filler slug: element-complaint-filler displayName: 要素式法律文書一鍵生成 version: 1.0.3 description: >- 要素式法律文書一鍵生成(起訴狀/答辯狀/強制執行申請書)。根據使用者提供的原始材料, 自動提取資訊並填入要素式模板。已內建兩個模板:民間借貸-要素式起訴狀、強制執行申請書-要素式起訴狀。 如案由不同,需使用者自行上傳要素式模板(.docx)。 觸發場景:(1) 使用者要求填寫要素式起訴狀/答辯狀/強制執行申請;(2) 使用者提供了傳統格式的法律文書; (3) 使用者說"填入要素式表格""生成要素式文書"等。 推薦模型:DeepSeek V4 Pro。 author: 陸凌燕(北京德恆(無錫)律師事務所) license: MIT
根據使用者提供的原始材料(起訴狀/答辯狀 .doc/.docx 或文字描述)和要素式模板(.docx), 自動提取關鍵資訊並填入模板,生成可直接提交法院的要素式文書。
以下兩個模板已經過實戰驗證,其完整結構(每個 cell 的文字內容、樣式、合併對映、欄位座標)記錄在 references/ 中。使用者不需要上傳模板檔案——AI 根據 references 中的資訊直接用 python-docx 重建模板,再填入資料。
| 模板 | 結構 Dump | 欄位快查 |
|---|---|---|
| 民間借貸-要素式起訴狀 | references/民間借貸-要素式起訴狀_structure.md |
references/民間借貸-要素式起訴狀_fields.md |
| 強制執行申請書-要素 | references/強制執行申請書-要素式起訴狀_structure.md |
references/強制執行申請書-要素式起訴狀_fields.md |
匹配方式:如果使用者說"民間借貸起訴狀"或"強制執行申請書"且沒有上傳模板檔案,直接從 references 重建模板,不要求使用者上傳。如果使用者上傳了自己的模板檔案,以使用者上傳的為準。如果案由不是以上兩種,告知使用者需要自行提供要素式模板。
模板積累機制:每次使用者上傳新模板並完成填寫後,自動執行 inspect_template() 將結構 dump 和欄位快查儲存到 references/ 目錄。下次同案由直接用,無需再次上傳。references 目錄就是使用者的個人模板庫,隨用隨長。
永遠不要直接修改原件。 先安全複製,再自動發現模板的字型和樣式。
from fill_helpers import copy_template, discover_template_style
# 1. 安全複製
work_path = copy_template("/path/to/模板.docx")
# 返回: /path/to/模板_filled.docx
# 2. 自動發現樣式
style = discover_template_style(work_path)
# 返回: {'font_name': '仿宋', 'style_id': '6', 'style_name': 'Table Text'}
# 3. 用發現的樣式填充全域性變數
import fill_helpers
fill_helpers.FONT_NAME = style['font_name']
fill_helpers.TABLE_TEXT_STYLE = style['style_id']
為什麼這一步不能跳過:不同法院的模板使用不同的樣式 ID(可能是 "5"、"7"、"8"),不同字型(方正書宋_GBK / 仿宋 / 宋體)。硬編碼會導致字型錯誤。
from fill_helpers import read_source
text = read_source("/path/to/起訴狀.doc")
from fill_helpers import inspect_template
print(inspect_template(work_path)) # 現在還會輸出發現的樣式資訊
關注:模板是起訴狀還是答辯狀、每個表格的行列數、哪些 cell 是 ghost。
不再需要手工從原始文本中摳資訊,使用內建解析器:
from fill_helpers import (
parse_parties, parse_claims, parse_facts, detect_case_type
)
# 自動提取當事人資訊
parties = parse_parties(text)
# parties['plaintiff'] = {'name': '張某', 'gender': '女', ...}
# parties['defendant'] = {'name': '李某', 'gender': '女', ...}
# 自動提取訴訟請求(按條拆分)
claims = parse_claims(text)
# ['判令被告向原告歸還款項100,000元', '...']
# 自動提取事實與理由全文
facts = parse_facts(text)
# 自動檢測案由
case_type = detect_case_type(text)
# '民間借貸'
使用 scripts/fill_helpers.py 的工具函式。核心規則(七個血的教訓):
只寫唯一 cell:
python
if not is_unique_cell(table, ri, ci):
continue
不涉及的部分加 "/"(cell_skip 已內建防誤傷保護——如果 cell 已被填入實際資料,不會追加 "/"):
python
cell_skip(table.cell(ri, ci))
概要框直接貼上原文:
python
cell_set(t2.cell(4, 0), claims_text.split('\n'))
cell_set(t2.cell(17, 0), facts_text.split('\n'))
出生日期用段落級替換:
python
cell_replace_para(cell, '出生日期:', '出生日期:1955 年 6 月 25 日')
證據清單和調解意願留空:不填、不打勾。
一鍵填寫當事人(支援自然人和法人):
python
fill_natural_person(cell, parties['plaintiff'])
fill_legal_entity(cell, company_data)
字型統一:
python
ensure_font(cell) # 使用第 0 步發現的字型和樣式
生成 .docx 後,直接抽檢關鍵欄位,發現問題當場修。
from fill_helpers import validate_output
warnings = validate_output(work_path) # 自動掃描遺漏
# 人工抽檢關鍵欄位
print(doc.tables[0].cell(2, 1).text) # 原告
print(doc.tables[1].cell(1, 1).text) # 被告
print(doc.tables[2].cell(5, 1).text) # 本金
print(doc.tables[2].cell(6, 1).text) # 利息
| 函式 | 用途 |
|---|---|
copy_template(src) |
安全複製,返回工作路徑 |
discover_template_style(path) |
自動發現字型和樣式 ID |
inspect_template(path) |
輸出模板完整結構(含樣式資訊) |
| 函式 | 用途 |
|---|---|
read_source(path) |
讀取 .doc/.docx/純文本 |
parse_parties(text) |
提取原告/被告結構化資訊 |
parse_claims(text) |
拆分訴訟請求為列表 |
parse_facts(text) |
提取事實與理由全文 |
detect_case_type(text) |
檢測案由(民間借貸/買賣合同/等) |
| 函式 | 場景 |
|---|---|
cell_replace(cell, old, new) |
單行欄位:姓名、電話、身份證號 |
cell_replace_para(cell, keyword, new) |
跨 run 欄位:出生日期、住址 |
cell_set(cell, lines) |
完整覆寫:概要框、自由文本 |
cell_skip(cell) |
不涉及項:加 "/",已防二重呼叫 |
cell_tick(cell, label) |
勾選核取方塊 |
cell_gender(cell, gender) |
性別勾選(防雙框專用) |
ensure_font(cell) |
字型統一樣式 |
is_unique_cell(table, ri, ci) |
Ghost cell 判斷 |
fill_natural_person(cell, data) |
一鍵填寫自然人 |
fill_legal_entity(cell, data) |
一鍵填寫法人/非法人組織 |
| 函式 | 用途 |
|---|---|
validate_output(path) |
檢查遺漏欄位 |
inspect_template 確認 ghost 對映再寫discover_template_style 實際返回值為準以下規則來自強制執行申請書填寫的翻車經驗:
優先 run 級替換,不要 cell_set 覆寫已有內容的 cell。已有內容的 cell(如申請執行事項)有複雜的段落和 run 結構,cell_set 會把整個 cell 清空重寫,丟失原模板格式。正確做法是遍歷原有 run,只替換數值。
性別勾選用 cell_gender,不要手動拼。部分字型(如仿宋)下 □ 和 ☑ 渲染完全一樣,"男□ 女☑"會看起來像兩個相同的框。cell_gender 把整行重寫為單一 run"性別:女☑",去掉未選項的 □。
7w4.net有更好的技能外掛。
ensure_font 只對新增內容呼叫。已有資料的 cell(如模板中已預填的姓名),其字型走的是樣式繼承,強制寫顯式字型會改變顯示效果。只在 cell_set 覆寫過的 cell 上呼叫 ensure_font。
模板可能已預填資料。部分模板(如從法院系統匯出的)已包含當事人資訊、案號、判決主文等。先檢查哪些欄位已有值,只改需要改的,不要覆寫已有正確資料。
模板樣式不統一。同一個模板中,不同 cell 可能使用不同 pStyle(如 Normal vs style 7)。inspect_template 輸出的 [pStyle=X] 標註可以幫助識別。修改 cell 時不要改變其原有 pStyle。
這是一款專業度較高的法律文書工具,能自動將傳統起訴狀轉換為法院標準格式,內建民間借貸和執行申請兩個常用模板。文件非常詳細,對各欄位位置和處理規則標註清晰。但目前僅支援蘋果電腦,且模板種類有限,其他型別的案子需要自己準備模板。總體而言,在要素式文書這個細分領域做得相當紮實。