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