From 4606fcd5c62b1177e040101abf6e7fb02f6d82cd Mon Sep 17 00:00:00 2001 From: selfrelease Date: Tue, 1 Sep 2026 10:52:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B3=95=E5=8A=A1=E5=9C=BA=E6=99=AF?= =?UTF-8?q?=E6=B7=B1=E5=8C=96-=E8=B4=A7=E6=AC=BE=E5=82=AC=E6=94=B6?= =?UTF-8?q?=E5=85=A8=E6=B5=81=E7=A8=8B+=E5=90=88=E5=90=8C=E5=AE=A1?= =?UTF-8?q?=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 后端: - detect_legal_subscene(): 意图检测,区分催收/审查/通用 - DEBT_COLLECTION_PROMPT: 催收6阶段流程prompt(回款概率+阶段判断+行动建议) - CONTRACT_REVIEW_PROMPT: 合同审查prompt(风险等级+条款清单+修改建议+谈判要点) - build_dynamic_prompt: 法务场景自动追加子方向prompt 种子数据: - seed_debt_templates.py: 5类催收文书模板(催款函/律师函/支付令/财产保全/执行申请) - seed_contract_risks.py: 5类合同风险条款库(买卖/承揽/租赁/合作/经销) Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- bossai.py | 82 +++++ ...-01-001-法务场景深化-货款催收与合同审查.md | 53 ++++ seed_contract_risks.py | 293 ++++++++++++++++++ seed_debt_templates.py | 285 +++++++++++++++++ 4 files changed, 713 insertions(+) create mode 100644 pmdocs/changes/2026-09-01-001-法务场景深化-货款催收与合同审查.md create mode 100644 seed_contract_risks.py create mode 100644 seed_debt_templates.py diff --git a/bossai.py b/bossai.py index 1d44be1..88d476c 100644 --- a/bossai.py +++ b/bossai.py @@ -2989,6 +2989,80 @@ SCENE_PROMPTS: dict[str, str] = { } +# ===== 法务场景子方向:催收 / 合同审查 ===== + +# 催收关键词:检测到时激活催收专用 prompt +DEBT_COLLECTION_KEYWORDS = [ + "欠款", "拖欠", "催收", "催款", "货款", "回款", "收账", "讨债", + "不付款", "不给钱", "赖账", "跑路", "失联", "欠钱", + "逾期未付", "拖欠货款", "客户欠", "应收账款", "坏账", + "支付令", "强制执行", "财产保全", "冻结账户", +] + +# 合同审查关键词 +CONTRACT_REVIEW_KEYWORDS = [ + "审查合同", "审合同", "看合同", "合同有没有问题", "合同风险", + "合同条款", "这个合同", "帮我看看合同", "合同能不能签", + "违约金过高", "付款条件", "管辖条款", "保密条款", + "合同陷阱", "合同漏洞", "合同问题", +] + + +def detect_legal_subscene(question: str) -> str: + """检测法务问题的子方向。 + + Returns: + 'debt_collection' / 'contract_review' / 'general' + """ + q = question.lower() + if any(kw in q for kw in DEBT_COLLECTION_KEYWORDS): + return "debt_collection" + if any(kw in q for kw in CONTRACT_REVIEW_KEYWORDS): + return "contract_review" + return "general" + + +# 催收专用 prompt 段:追加到法务 system prompt 后 +DEBT_COLLECTION_PROMPT = """ + +【当前问题属于货款催收场景,请按以下框架回答:】 + +1. **回款概率评估**:根据欠款金额、逾期天数、对方经营状况、证据情况,给出回款概率(高>70%/中30-70%/低<30%) +2. **当前阶段判断**:判断处于催收6阶段中的哪一阶段 + - 阶段1:友好催收(0-30天)→ 催收话术 + 催款函 + - 阶段2:正式催收(30-60天)→ 律师函 + 施压策略 + - 阶段3:支付令(60-90天)→ 支付令申请书(快速司法途径) + - 阶段4:民事诉讼(90天+)→ 起诉状 + 财产保全申请 + - 阶段5:庭审准备 → 证据清单 + 代理思路 + - 阶段6:强制执行 → 执行申请书 + 财产线索排查 +3. **本阶段行动建议**:具体可执行的步骤,包括话术模板、文书要点 +4. **关键风险提示**:对方可能转移财产/无财产可供执行/诉讼时效等 +5. **下一步预判**:如果本阶段不成功,下一阶段是什么 + +注意:始终从老板(债权人)视角出发,目标是帮老板最快回款。 +""" + +# 合同审查专用 prompt 段 +CONTRACT_REVIEW_PROMPT = """ + +【当前问题属于合同审查场景,请按以下框架回答:】 + +1. **风险等级**:高/中/低(综合评估) +2. **风险条款清单**(按严重程度排序): + - 🔴 高风险条款:说明风险 + 修改建议(给出替代条款文本) + - 🟡 中风险条款:说明风险 + 修改建议 + - 🟢 低风险条款:提示即可 +3. **缺失条款提醒**:该类合同应有但未约定的条款(如保密/知识产权/退出机制) +4. **谈判要点**: + - 不能让的条款(签了就吃亏) + - 可以让的条款(作为谈判筹码) + - 谈判策略建议 + +审查维度:付款条款、违约责任、管辖争议、知识产权、退出机制、隐性陷阱(自动续约/排他条款等)。 +注意:从老板(合同一方)视角出发,目标是帮老板识别风险、争取有利条款。 +""" + + def build_dynamic_prompt(scene: str, question: str, kimi_client=None, fact_summary: str | None = None) -> str: """基于场景+问题动态生成定制 system prompt。 @@ -3006,6 +3080,14 @@ def build_dynamic_prompt(scene: str, question: str, kimi_client=None, """ base_prompt = SCENE_PROMPTS.get(scene, SCENE_PROMPTS["legal"]) + # 法务场景:检测子方向,追加专用 prompt + if scene == "legal": + subscene = detect_legal_subscene(question) + if subscene == "debt_collection": + base_prompt += DEBT_COLLECTION_PROMPT + elif subscene == "contract_review": + base_prompt += CONTRACT_REVIEW_PROMPT + if not kimi_client: return base_prompt diff --git a/pmdocs/changes/2026-09-01-001-法务场景深化-货款催收与合同审查.md b/pmdocs/changes/2026-09-01-001-法务场景深化-货款催收与合同审查.md new file mode 100644 index 0000000..40af3ee --- /dev/null +++ b/pmdocs/changes/2026-09-01-001-法务场景深化-货款催收与合同审查.md @@ -0,0 +1,53 @@ +# CHG-20260901-001:法务场景深化 - 货款催收全流程 + 合同审查 + +## 背景 + +中小企业老板最高频、最痛、最愿意付费的法律需求是"催收货款"和"合同防坑"。 +当前法务场景只做通用法律咨询,缺少针对这两个核心场景的深度服务能力。 + +## 原因 + +用户反馈 + 业务分析: +- 货款催收:每个中小企业老板都有欠款问题,从催收到执行是完整闭环 +- 合同审查:签约前审查是"防患于未然",比事后打官司价值更大 +- 当前法务场景的 AI 回答偏通用,缺少结构化流程引导和文书生成 + +## 目标 + +1. 货款催收:6 阶段全流程指引 + 每阶段文书生成 + 回款概率评估 +2. 合同审查:上传合同 → AI 逐条审查 → 风险标红 → 修改建议 → 谈判要点 + +## 范围 + +- 法务场景 system prompt 深化 +- 新增催收流程引导卡片 +- 合同审查功能(复用上传 + AI 分析) +- 知识库补充催收文书模板、合同风险条款库 + +## 影响评估 + +| 维度 | 是否影响 | 影响说明 | 处理动作 | 状态 | +|---|---|---|---|---| +| 需求 | 是 | 新增货款催收、合同审查两个子方向 | 追加需求条目 | 待处理 | +| PRD | 是 | 法务场景功能扩展 | 追加 PRD 功能描述 | 待处理 | +| 任务 | 是 | 新增开发任务 | 追加 TASK 编号 | 待处理 | +| DB | 否 | 复用现有表结构 | 无 | 不涉及 | +| 后端 | 是 | system prompt 扩展、催收流程 API、合同审查 API | 修改 api.py + bossai.py | 待处理 | +| 前端 | 是 | ChatPanel 催收流程卡片、合同审查结果展示 | 修改 ChatPanel.tsx | 待处理 | +| 权限码 | 否 | 复用法务场景权限 | 无 | 不涉及 | + +## 落地任务 + +- [ ] TASK-1:货款催收 system prompt 设计 + 6阶段流程 +- [ ] TASK-2:催收文书模板入库(催收函/律师函/支付令申请/起诉状/执行申请) +- [ ] TASK-3:合同审查 system prompt 设计 + 风险条款库 +- [ ] TASK-4:合同审查知识库补充(高频合同风险条款) +- [ ] TASK-5:前端催收流程卡片组件 +- [ ] TASK-6:前端合同审查结果展示组件 +- [ ] TASK-7:测试 + 部署 + +## 风险与回滚 + +- 风险:法务场景 prompt 过长导致 AI 回答质量下降 +- 回滚方案:prompt 分支加载,催收/审查只在检测到相关关键词时激活 +- 需要回归测试:法务场景通用咨询不受影响 diff --git a/seed_contract_risks.py b/seed_contract_risks.py new file mode 100644 index 0000000..77a5fe1 --- /dev/null +++ b/seed_contract_risks.py @@ -0,0 +1,293 @@ +"""合同风险条款库 - 种子数据导入。 + +将中小企业高频合同类型的风险条款导入知识库(doc_type='contract_risk_clause'), +供法务参谋在合同审查场景中检索参考。 + +覆盖合同类型:买卖合同、承揽合同、租赁合同、服务合同、合作协议、经销合同 +""" +import json +import os +import sys + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from bossai import KnowledgeStore + + +CONTRACT_RISKS = [ + # ===== 买卖合同风险 ===== + { + "title": "买卖合同风险条款库", + "doc_type": "contract_risk_clause", + "category": "合同审查", + "source": "BossAi法务参谋", + "content": json.dumps({ + "contract_type": "买卖合同", + "high_risk_clauses": [ + { + "risk": "违约金过高", + "description": "违约金超过合同总额30%或超过实际损失30%", + "legal_basis": "民法典第585条,违约金过分高于损失可请求调整", + "modification": "改为:违约金按实际损失计算,上限不超过合同总额10%", + }, + { + "risk": "无逾期付款违约金", + "description": "合同未约定逾期付款的违约责任", + "legal_basis": "民法典第577条,未约定违约金可主张实际损失但举证困难", + "modification": "增加:买方逾期付款的,按日万分之五支付违约金", + }, + { + "risk": "验收标准模糊", + "description": "验收条款只写'符合质量标准'未明确具体标准", + "legal_basis": "民法典第621条,验收标准不明易引发争议", + "modification": "明确:验收标准为[具体国标/行标/企业标准],验收期为收到货物后7个工作日", + }, + { + "risk": "所有权保留未约定", + "description": "未约定付清全款前货物所有权归卖方", + "legal_basis": "民法典第641条,所有权保留是卖方重要保障", + "modification": "增加:买方付清全部价款前,货物所有权仍归卖方所有", + }, + ], + "medium_risk_clauses": [ + { + "risk": "付款周期过长", + "description": "付款周期超过90天", + "modification": "争取缩短至60天内,或分阶段付款(预付30%+发货前40%+验收后30%)", + }, + { + "risk": "管辖约定不利", + "description": "管辖法院约定在对方所在地", + "modification": "改为:由原告所在地人民法院管辖,或由合同履行地法院管辖", + }, + { + "risk": "无质量异议期", + "description": "未约定提出质量异议的期限", + "modification": "增加:买方应在收到货物后15日内提出书面质量异议,逾期视为验收合格", + }, + ], + "missing_clauses": [ + "保密条款(防止商业信息泄露)", + "知识产权归属(定制产品尤其重要)", + "不可抗力条款(明确范围和通知义务)", + "解除条件(什么情况下可以解除合同)", + "争议解决方式(诉讼或仲裁,二选一)", + ], + "negotiation_points": { + "cannot_concede": "违约金比例、管辖法院、付款条件", + "can_concede": "付款周期(可接受60天)、验收期(可延长至15天)", + "strategy": "先压违约金比例,再用付款周期做交换;管辖法院作为最后底线", + }, + }, ensure_ascii=False), + }, + # ===== 承揽合同风险 ===== + { + "title": "承揽合同风险条款库", + "doc_type": "contract_risk_clause", + "category": "合同审查", + "source": "BossAi法务参谋", + "content": json.dumps({ + "contract_type": "承揽合同", + "high_risk_clauses": [ + { + "risk": "无验收和异议期", + "description": "未约定工作成果验收期限和异议提出期", + "legal_basis": "民法典第781条,承揽人完成工作后定作人应及时验收", + "modification": "增加:定作人应在收到工作成果后10日内验收,如有异议应在验收期内书面提出,逾期视为验收合格", + }, + { + "risk": "无定作人协助义务", + "description": "定作人未提供必要协助(材料/场地/信息)时,承揽人无救济措施", + "legal_basis": "民法典第778条,定作人不履行协助义务承揽人可顺延工期或解除合同", + "modification": "增加:定作人未按约定提供协助的,工期顺延;逾期15日以上的,承揽人有权解除合同并要求赔偿", + }, + { + "risk": "知识产权归属不清", + "description": "定制成果的知识产权归属未约定", + "legal_basis": "民法典第784条,承揽成果知识产权归属按约定", + "modification": "明确:工作成果的知识产权归[定作人/承揽人]所有,未经许可不得用于其他项目", + }, + ], + "medium_risk_clauses": [ + { + "risk": "无留置权约定", + "description": "定作人不付款时,承揽人无留置工作成果的权利", + "modification": "增加:定作人未按期付款的,承揽人有权留置工作成果", + }, + { + "risk": "材料风险分担不明", + "description": "原材料损毁风险由谁承担未约定", + "modification": "明确:定作人提供的材料,交付前风险由定作人承担;承揽人提供的材料,交付前风险由承揽人承担", + }, + ], + "missing_clauses": [ + "保密条款(承揽人接触定作人商业信息)", + "转包限制(未经许可不得转包)", + "质保期(工作成果的保修期限)", + ], + }, ensure_ascii=False), + }, + # ===== 租赁合同风险 ===== + { + "title": "租赁合同风险条款库", + "doc_type": "contract_risk_clause", + "category": "合同审查", + "source": "BossAi法务参谋", + "content": json.dumps({ + "contract_type": "租赁合同", + "high_risk_clauses": [ + { + "risk": "自动续约条款", + "description": "合同到期未书面通知则自动续约,且续约期限过长", + "legal_basis": "民法典第734条,租赁期满承租人继续使用且出租人未反对的视为不定期租赁", + "modification": "改为:合同到期前30日双方书面确认是否续约,未确认的合同到期终止", + }, + { + "risk": "装修补偿缺失", + "description": "承租人装修后提前解约,无装修补偿约定", + "modification": "增加:承租人经同意的装修,合同到期或因出租人原因提前解约的,出租人按装修残值补偿", + }, + { + "risk": "拆迁补偿归属不清", + "description": "租赁期间遇拆迁,补偿款归属未约定", + "modification": "明确:拆迁补偿中,停产停业损失补偿和装修补偿归承租人,房屋价值补偿归出租人", + }, + ], + "medium_risk_clauses": [ + { + "risk": "租金调整机制缺失", + "description": "长期租赁无租金调整条款", + "modification": "增加:租金每[2年]调整一次,调整幅度不超过[10%]", + }, + { + "risk": "转租限制不明", + "description": "能否转租及转租条件未约定", + "modification": "明确:承租人未经出租人书面同意不得转租;经同意转租的,转租期限不得超过原租赁期限", + }, + ], + "missing_clauses": [ + "维修责任划分(房屋结构/设备/日常维修)", + "优先续租权(同等条件下承租人优先)", + "不可抗力条款(疫情/政策影响减租)", + ], + }, ensure_ascii=False), + }, + # ===== 合作协议风险 ===== + { + "title": "合作协议风险条款库", + "doc_type": "contract_risk_clause", + "category": "合同审查", + "source": "BossAi法务参谋", + "content": json.dumps({ + "contract_type": "合作协议/合伙协议", + "high_risk_clauses": [ + { + "risk": "退出机制缺失", + "description": "合作方退出条件、退出补偿、退出后义务未约定", + "modification": "增加退出条款:合作方提前30日书面通知可退出;退出时按[评估价/原价/折价]回购份额;退出后2年内不得从事同类业务", + }, + { + "risk": "决策机制不明", + "description": "重大事项决策权未明确,易陷入僵局", + "modification": "明确:日常事项多数决,重大事项(投资/融资/人事/分红)需[2/3以上]同意,僵局时[仲裁/第三方调解]", + }, + { + "risk": "利润分配模糊", + "description": "分配比例/时间/条件不明确", + "modification": "明确:利润按[出资比例/约定比例]分配,每[季度/半年]分配一次,分配前预留[20%]作为风险准备金", + }, + { + "risk": "竞业禁止缺失", + "description": "合作期间及结束后无竞业禁止约定", + "modification": "增加:合作期间及结束后[2年]内,不得直接或间接从事与合作项目竞争的业务", + }, + ], + "medium_risk_clauses": [ + { + "risk": "知识产权归属不清", + "description": "合作成果的知识产权归属未约定", + "modification": "明确:合作前各自拥有的知识产权仍归各自所有;合作中产生的知识产权按[共有/某方所有]约定", + }, + { + "risk": "保密条款缺失", + "description": "无保密义务约定", + "modification": "增加:双方对合作中获知的对方商业信息负有保密义务,保密期为合作期间及结束后[3年]", + }, + ], + "missing_clauses": [ + "排他性约定(合作期间是否排他)", + "违约责任(合作方违约的具体赔偿)", + "争议解决(仲裁或诉讼)", + "终止条件(什么情况下合作终止)", + ], + }, ensure_ascii=False), + }, + # ===== 经销合同风险 ===== + { + "title": "经销合同风险条款库", + "doc_type": "contract_risk_clause", + "category": "合同审查", + "source": "BossAi法务参谋", + "content": json.dumps({ + "contract_type": "经销合同", + "high_risk_clauses": [ + { + "risk": "窜货处罚过重", + "description": "经销商跨区域销售的处罚条款过于严厉", + "modification": "改为:首次窜货警告并罚款[合同总额5%],第二次罚款[10%],第三次可解除合同", + }, + { + "risk": "最低采购量过高", + "description": "最低采购量要求超出经销商实际销售能力", + "modification": "根据历史销售数据设定合理最低采购量,或改为阶梯式目标", + }, + { + "risk": "品牌授权范围过宽", + "description": "授权经销商使用商标的范围无限制", + "modification": "明确:商标仅限于经销产品销售使用,不得用于其他用途,合同终止后立即停止使用", + }, + ], + "medium_risk_clauses": [ + { + "risk": "退换货条件苛刻", + "description": "滞销产品退换货条件过严", + "modification": "增加:滞销产品(3个月未售出)可按进货价[80%]退货", + }, + { + "risk": "价格管控缺失", + "description": "无最低零售价约定,易引发价格战", + "modification": "增加:经销商零售价不得低于指导价的[90%],违规者按违约处理", + }, + ], + "missing_clauses": [ + "区域保护(独家经销区域范围)", + "售后责任(谁负责售后维修)", + "品牌维护(广告投放和品牌维护义务)", + "合同终止后库存处理", + ], + }, ensure_ascii=False), + }, +] + + +def main(): + """导入合同风险条款库到知识库。""" + k = KnowledgeStore() + count = 0 + for risk in CONTRACT_RISKS: + try: + k.add( + title=risk["title"], + content=risk["content"], + doc_type=risk["doc_type"], + category=risk.get("category"), + source=risk.get("source", "BossAi"), + ) + count += 1 + print(f" 已导入: {risk['title']}") + except Exception as e: + print(f" 失败: {risk['title']} - {e}") + print(f"\n已导入 {count} 类合同风险条款库到知识库") + + +if __name__ == "__main__": + main() diff --git a/seed_debt_templates.py b/seed_debt_templates.py new file mode 100644 index 0000000..7b4f192 --- /dev/null +++ b/seed_debt_templates.py @@ -0,0 +1,285 @@ +"""货款催收文书模板 - 种子数据导入。 + +将催收全流程6阶段的文书模板导入知识库(doc_type='debt_collection_template'), +供法务参谋在催收场景中生成对应文书。 + +阶段: +1. 友好催收(0-30天) → 催款函 +2. 正式催收(30-60天) → 律师函 +3. 支付令(60-90天) → 支付令申请书 +4. 民事诉讼(90天+) → 起诉状 + 财产保全申请 +5. 庭审准备 → 证据目录 + 代理词框架 +6. 强制执行 → 强制执行申请书 +""" +import json +import os +import sys + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from bossai import KnowledgeStore + + +DEBT_TEMPLATES = [ + # ===== 阶段1:催款函 ===== + { + "title": "催款函模板(友好催收阶段)", + "doc_type": "debt_collection_template", + "category": "催收文书", + "source": "BossAi法务参谋", + "content": json.dumps({ + "name": "催款函", + "stage": 1, + "stage_name": "友好催收(0-30天)", + "applicable": "逾期30天内,双方关系尚可,希望维护合作关系", + "elements": [ + {"key": "creditor", "label": "债权人(我方)名称", "type": "text", "required": True}, + {"key": "debtor", "label": "债务人(对方)名称", "type": "text", "required": True}, + {"key": "contract_no", "label": "合同编号", "type": "text", "required": False}, + {"key": "debt_amount", "label": "欠款金额(元)", "type": "text", "required": True}, + {"key": "debt_reason", "label": "欠款事由(货款/服务费等)", "type": "text", "required": True}, + {"key": "due_date", "label": "应付款日期", "type": "date", "required": True}, + {"key": "overdue_days", "label": "逾期天数", "type": "number", "required": True}, + {"key": "request_deadline", "label": "要求还款期限", "type": "date", "required": True}, + {"key": "contact_person", "label": "联系人", "type": "text", "required": True}, + {"key": "contact_phone", "label": "联系电话", "type": "text", "required": True}, + ], + "template_text": ( + "催款函\n\n" + "{debtor}:\n\n" + "我司{creditor}与贵司于合同编号{contract_no}项下," + "贵司尚欠我司{debt_reason}款项人民币{debt_amount}元," + "该款项应于{due_date}支付,现已逾期{overdue_days}天。\n\n" + "鉴于双方长期合作关系,我司一直予以谅解。但该笔款项已严重影响我司资金周转," + "请贵司于{request_deadline}前将上述款项支付至我司账户。\n\n" + "如贵司暂遇资金困难,请于收到本函后3个工作日内与我司联系,协商还款方案。\n" + "逾期未支付且未协商的,我司将不得不采取进一步法律措施。\n\n" + "{creditor}\n" + "联系人:{contact_person}\n" + "联系电话:{contact_phone}\n" + "{date}" + ), + }, ensure_ascii=False), + }, + # ===== 阶段2:律师函 ===== + { + "title": "律师函模板(正式催收阶段)", + "doc_type": "debt_collection_template", + "category": "催收文书", + "source": "BossAi法务参谋", + "content": json.dumps({ + "name": "律师函", + "stage": 2, + "stage_name": "正式催收(30-60天)", + "applicable": "逾期30-60天,友好催收无效,需要正式施压", + "elements": [ + {"key": "law_firm", "label": "律师事务所名称", "type": "text", "required": True}, + {"key": "lawyer_name", "label": "律师姓名", "type": "text", "required": True}, + {"key": "creditor", "label": "委托人(债权人)名称", "type": "text", "required": True}, + {"key": "debtor", "label": "债务人名称", "type": "text", "required": True}, + {"key": "debt_amount", "label": "欠款金额(元)", "type": "text", "required": True}, + {"key": "debt_reason", "label": "欠款事由", "type": "text", "required": True}, + {"key": "contract_no", "label": "合同编号", "type": "text", "required": False}, + {"key": "due_date", "label": "应付款日期", "type": "date", "required": True}, + {"key": "overdue_days", "label": "逾期天数", "type": "number", "required": True}, + {"key": "prior_efforts", "label": "已催收情况", "type": "textarea", "required": True}, + {"key": "deadline", "label": "最后还款期限", "type": "date", "required": True}, + {"key": "legal_consequences", "label": "法律后果提示", "type": "textarea", "required": False}, + ], + "template_text": ( + "律师函\n\n" + "{law_firm}函〔2026〕第XX号\n\n" + "{debtor}:\n\n" + "本律师受{creditor}委托,就贵司拖欠{debt_reason}款项一事,致函如下:\n\n" + "一、基本事实\n" + "贵司与委托人于合同编号{contract_no}项下发生业务往来," + "贵司应于{due_date}向委托人支付{debt_reason}款项人民币{debt_amount}元。" + "截至本函发出之日,已逾期{overdue_days}天,经委托人多次催收({prior_efforts})," + "贵司至今未付。\n\n" + "二、法律意见\n" + "根据《中华人民共和国民法典》相关规定,贵司的行为已构成违约," + "委托人有权要求贵司立即支付欠款及逾期付款违约金。\n\n" + "三、律师要求\n" + "请贵司于{deadline}前将上述款项人民币{debt_amount}元" + "支付至委托人指定账户。\n\n" + "四、法律后果\n" + "如贵司在上述期限内仍未履行付款义务,本律师将受托采取以下法律措施:\n" + "1. 向人民法院申请支付令;\n" + "2. 向人民法院提起民事诉讼,并申请财产保全,冻结贵司银行账户;\n" + "3. 追究贵司逾期付款的违约金及实现债权的费用(含律师费)。\n\n" + "{law_firm}\n" + "经办律师:{lawyer_name}\n" + "{date}" + ), + }, ensure_ascii=False), + }, + # ===== 阶段3:支付令申请书 ===== + { + "title": "支付令申请书模板(司法催收阶段)", + "doc_type": "debt_collection_template", + "category": "催收文书", + "source": "BossAi法务参谋", + "content": json.dumps({ + "name": "支付令申请书", + "stage": 3, + "stage_name": "支付令(60-90天)", + "applicable": "逾期60-90天,债权债务关系明确,无其他债务纠纷,请求法院发出支付令", + "elements": [ + {"key": "applicant", "label": "申请人名称", "type": "text", "required": True}, + {"key": "applicant_legal", "label": "法定代表人", "type": "text", "required": True}, + {"key": "applicant_address", "label": "申请人地址", "type": "text", "required": True}, + {"key": "applicant_phone", "label": "申请人电话", "type": "text", "required": True}, + {"key": "respondent", "label": "被申请人名称", "type": "text", "required": True}, + {"key": "respondent_legal", "label": "被申请人法定代表人", "type": "text", "required": True}, + {"key": "respondent_address", "label": "被申请人地址", "type": "text", "required": True}, + {"key": "respondent_phone", "label": "被申请人电话", "type": "text", "required": False}, + {"key": "debt_amount", "label": "欠款金额(元)", "type": "text", "required": True}, + {"key": "debt_reason", "label": "欠款事由", "type": "textarea", "required": True}, + {"key": "evidence_list", "label": "证据清单", "type": "textarea", "required": True}, + {"key": "court", "label": "申请法院", "type": "text", "required": True}, + ], + "template_text": ( + "支付令申请书\n\n" + "申请人:{applicant}\n" + "住所:{applicant_address}\n" + "法定代表人:{applicant_legal}\n" + "联系电话:{applicant_phone}\n\n" + "被申请人:{respondent}\n" + "住所:{respondent_address}\n" + "法定代表人:{respondent_legal}\n" + "联系电话:{respondent_phone}\n\n" + "请求事项:\n" + "请求人民法院向被申请人发出支付令,督促被申请人向申请人支付" + "{debt_reason}款项人民币{debt_amount}元。\n\n" + "事实和理由:\n" + "{debt_reason}\n\n" + "申请人与被申请人之间的债权债务关系明确,并有以下证据予以证明:\n" + "{evidence_list}\n\n" + "被申请人至今未履行付款义务,且对该债务无争议。" + "根据《中华人民共和国民事诉讼法》第二百二十一条规定," + "特向{court}申请支付令。\n\n" + "此致\n" + "{court}\n\n" + "申请人:{applicant}\n" + "{date}" + ), + }, ensure_ascii=False), + }, + # ===== 阶段4:财产保全申请书 ===== + { + "title": "财产保全申请书模板(诉讼阶段)", + "doc_type": "debt_collection_template", + "category": "催收文书", + "source": "BossAi法务参谋", + "content": json.dumps({ + "name": "财产保全申请书", + "stage": 4, + "stage_name": "民事诉讼(90天+)", + "applicable": "起诉前或诉讼中,防止对方转移财产,申请冻结对方账户/查封财产", + "elements": [ + {"key": "applicant", "label": "申请人名称", "type": "text", "required": True}, + {"key": "respondent", "label": "被申请人名称", "type": "text", "required": True}, + {"key": "claim_amount", "label": "请求保全金额(元)", "type": "text", "required": True}, + {"key": "case_no", "label": "案号(诉中保全填)", "type": "text", "required": False}, + {"key": "property_info", "label": "请求保全的财产线索", "type": "textarea", "required": True}, + {"key": "urgency_reason", "label": "紧急性说明(对方可能转移财产的证据)", "type": "textarea", "required": True}, + {"key": "guarantee", "label": "担保方式(现金/保函)", "type": "text", "required": True}, + {"key": "court", "label": "申请法院", "type": "text", "required": True}, + ], + "template_text": ( + "财产保全申请书\n\n" + "申请人:{applicant}\n" + "被申请人:{respondent}\n\n" + "请求事项:\n" + "请求人民法院查封、冻结被申请人价值人民币{claim_amount}元的财产," + "具体财产线索如下:\n{property_info}\n\n" + "事实和理由:\n" + "申请人与被申请人因{case_no}一案,现已诉至贵院(或即将起诉)。" + "因被申请人存在转移财产的可能,{urgency_reason}" + "如不立即采取保全措施,将使申请人的合法权益受到难以弥补的损害。\n\n" + "担保:\n" + "申请人提供{guarantee}作为本次保全的担保。\n\n" + "此致\n" + "{court}\n\n" + "申请人:{applicant}\n" + "{date}" + ), + }, ensure_ascii=False), + }, + # ===== 阶段6:强制执行申请书 ===== + { + "title": "强制执行申请书模板(执行阶段)", + "doc_type": "debt_collection_template", + "category": "催收文书", + "source": "BossAi法务参谋", + "content": json.dumps({ + "name": "强制执行申请书", + "stage": 6, + "stage_name": "强制执行", + "applicable": "判决书/调解书/仲裁裁决书生效后,对方仍不履行,申请法院强制执行", + "elements": [ + {"key": "applicant", "label": "申请人名称", "type": "text", "required": True}, + {"key": "applicant_legal", "label": "法定代表人", "type": "text", "required": True}, + {"key": "applicant_address", "label": "申请人地址", "type": "text", "required": True}, + {"key": "respondent", "label": "被申请人名称", "type": "text", "required": True}, + {"key": "respondent_legal", "label": "被申请人法定代表人", "type": "text", "required": True}, + {"key": "respondent_address", "label": "被申请人地址", "type": "text", "required": True}, + {"key": "respondent_phone", "label": "被申请人电话", "type": "text", "required": False}, + {"key": "exec_amount", "label": "申请执行金额(元)", "type": "text", "required": True}, + {"key": "legal_doc", "label": "生效法律文书(判决书/调解书/裁决书编号)", "type": "text", "required": True}, + {"key": "legal_doc_date", "label": "法律文书生效日期", "type": "date", "required": True}, + {"key": "obligation", "label": "被申请人应履行的义务", "type": "textarea", "required": True}, + {"key": "property_clues", "label": "财产线索(已知)", "type": "textarea", "required": False}, + {"key": "court", "label": "执行法院", "type": "text", "required": True}, + ], + "template_text": ( + "强制执行申请书\n\n" + "申请人:{applicant}\n" + "住所:{applicant_address}\n" + "法定代表人:{applicant_legal}\n\n" + "被申请人:{respondent}\n" + "住所:{respondent_address}\n" + "法定代表人:{respondent_legal}\n" + "联系电话:{respondent_phone}\n\n" + "请求事项:\n" + "请求人民法院强制被申请人履行{legal_doc}确定的义务," + "向申请人支付人民币{exec_amount}元及迟延履行期间的债务利息。\n\n" + "事实和理由:\n" + "申请人与被申请人因{legal_doc}一案," + "该法律文书已于{legal_doc_date}生效。" + "被申请人应履行的义务为:{obligation}\n\n" + "但被申请人至今未履行上述义务。申请人已知的被申请人财产线索如下:\n" + "{property_clues}\n\n" + "根据《中华人民共和国民事诉讼法》相关规定," + "特向{court}申请强制执行。\n\n" + "此致\n" + "{court}\n\n" + "申请人:{applicant}\n" + "{date}" + ), + }, ensure_ascii=False), + }, +] + + +def main(): + """导入催收文书模板到知识库。""" + k = KnowledgeStore() + count = 0 + for tmpl in DEBT_TEMPLATES: + try: + k.add( + title=tmpl["title"], + content=tmpl["content"], + doc_type=tmpl["doc_type"], + category=tmpl.get("category"), + source=tmpl.get("source", "BossAi"), + ) + count += 1 + print(f" 已导入: {tmpl['title']}") + except Exception as e: + print(f" 失败: {tmpl['title']} - {e}") + print(f"\n已导入 {count} 类催收文书模板到知识库") + + +if __name__ == "__main__": + main()