Files
BossAi/seed_contract_risks.py
selfrelease fbda31b290
CI / 后端测试 (push) Has been cancelled
CI / 前端构建 (push) Has been cancelled
fix: seed脚本去掉KnowledgeStore不支持的category参数
2026-09-01 10:52:48 +08:00

294 lines
14 KiB
Python

"""合同风险条款库 - 种子数据导入。
将中小企业高频合同类型的风险条款导入知识库(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"],
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()