From 2d108c8381d1c7dcda2079c44fb9ae0093fa9742 Mon Sep 17 00:00:00 2001 From: wren <“porlong@qq.com”> Date: Tue, 28 Apr 2026 12:13:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20M4=20seed=20=E2=80=94=20upload=20&=20pu?= =?UTF-8?q?blish=2020=20rule=20sets,=20fix=20config/schema=20column=20name?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix _export_settings for pydantic v2 compatibility (model_fields) - Fix delete_time→deleted_at, update_time→updated_at in RuleServiceImpl - Add OssClient.EnsureBucket method - Replace contract_lease/sale/tech rules.yaml from new-rules - Seed script: batch upload 20 rule YAMLs to OSS + write DB + publish - Config: fix OSS import chain --- fastapi_admin/config/__init__.py | 22 +- .../fastapi_common_storage/oss_client.py | 12 + .../services/impl/ruleServiceImpl.py | 20 +- new-rules/contract.lease.yaml | 1567 +++++++++ new-rules/contract.sale.yaml | 963 ++++++ new-rules/contract.tech.yaml | 1455 +++++++++ rules/contract_lease/rules.yaml | 2838 +++++++++-------- rules/contract_lease/rules.yaml.bak | 1453 +++++++++ rules/contract_sale/rules.yaml | 1485 +++++---- rules/contract_tech/rules.yaml | 2009 ++++++++---- scripts/m4_seed_rules.py | 203 ++ 11 files changed, 9208 insertions(+), 2819 deletions(-) create mode 100644 new-rules/contract.lease.yaml create mode 100644 new-rules/contract.sale.yaml create mode 100644 new-rules/contract.tech.yaml create mode 100644 rules/contract_lease/rules.yaml.bak create mode 100644 scripts/m4_seed_rules.py diff --git a/fastapi_admin/config/__init__.py b/fastapi_admin/config/__init__.py index 1aff211..aeaa3d2 100644 --- a/fastapi_admin/config/__init__.py +++ b/fastapi_admin/config/__init__.py @@ -19,15 +19,25 @@ from ._settings import app, jwt, db, redis, oss, llm, vlm, ocr, leaudit as _leau def _export_settings(instance: object, prefix: str = "") -> dict[str, object]: """将 Settings 实例的所有字段和 @property 导出为模块级变量。""" result: dict[str, object] = {} + + # pydantic v2 model_fields + model_fields = getattr(instance, "model_fields", None) + if isinstance(model_fields, dict): + for key in model_fields: + if key.startswith("_"): + continue + result[key] = getattr(instance, key) + + # @property 和普通属性 for key in dir(type(instance)): - if key.startswith("_"): + if key.startswith("_") or key in result: continue - value = getattr(instance, key, None) - if callable(value) and not isinstance(value, property): + attr = getattr(type(instance), key, None) + if attr is None: continue - if isinstance(value, property): - value = value.__get__(instance) - result[key] = value + if isinstance(attr, property): + result[key] = attr.__get__(instance) + return result diff --git a/fastapi_common/fastapi_common_storage/oss_client.py b/fastapi_common/fastapi_common_storage/oss_client.py index f14642e..ed75b8e 100644 --- a/fastapi_common/fastapi_common_storage/oss_client.py +++ b/fastapi_common/fastapi_common_storage/oss_client.py @@ -144,6 +144,18 @@ class OssClient: TempFile.write(Content) return TempFile.name + def EnsureBucket(self, Bucket: str | None = None) -> str: + """确保 bucket 存在,不存在则创建。返回 bucket 名。""" + TargetBucket = Bucket or self.bucket + Client = self._GetMinioClient() + from minio import Minio + try: + if not Client.bucket_exists(TargetBucket): + Client.make_bucket(TargetBucket) + except Minio.S3Error: + pass + return TargetBucket + def ObjectExists(self, Source: str, Bucket: str | None = None) -> bool: """判断对象是否存在。""" Ref = self.ResolveObjectRef(Source=Source, Bucket=Bucket) diff --git a/fastapi_modules/fastapi_leaudit/services/impl/ruleServiceImpl.py b/fastapi_modules/fastapi_leaudit/services/impl/ruleServiceImpl.py index 93dcb61..5edd0de 100644 --- a/fastapi_modules/fastapi_leaudit/services/impl/ruleServiceImpl.py +++ b/fastapi_modules/fastapi_leaudit/services/impl/ruleServiceImpl.py @@ -46,7 +46,7 @@ class RuleServiceImpl(IRuleService): current_version_id, status FROM leaudit_rule_sets - WHERE delete_time IS NULL + WHERE deleted_at IS NULL ORDER BY id DESC """ ) @@ -80,7 +80,7 @@ class RuleServiceImpl(IRuleService): FROM leaudit_rule_versions rv JOIN leaudit_rule_sets rs ON rs.id = rv.rule_set_id WHERE rs.rule_type = :rule_type - AND rs.delete_time IS NULL + AND rs.deleted_at IS NULL ORDER BY rv.version_seq DESC, rv.id DESC """ ), @@ -208,7 +208,7 @@ class RuleServiceImpl(IRuleService): rule_name = :rule_name, domain_type = :domain_type, description = :description, - update_time = now() + updated_at = now() WHERE id = :rule_set_id """ ), @@ -361,7 +361,7 @@ class RuleServiceImpl(IRuleService): FROM leaudit_rule_type_bindings b JOIN leaudit_rule_sets rs ON rs.id = b.rule_set_id WHERE rs.rule_type = :rule_type - AND rs.delete_time IS NULL + AND rs.deleted_at IS NULL ORDER BY b.priority DESC, b.id DESC """ ), @@ -384,7 +384,7 @@ class RuleServiceImpl(IRuleService): rs.rule_name FROM leaudit_rule_type_bindings b JOIN leaudit_rule_sets rs ON rs.id = b.rule_set_id - WHERE rs.delete_time IS NULL + WHERE rs.deleted_at IS NULL ORDER BY rs.rule_type, b.priority DESC, b.id DESC """ ), @@ -417,7 +417,7 @@ class RuleServiceImpl(IRuleService): """创建规则类型绑定。""" async with GetAsyncSession() as Session: RuleSet = await Session.execute( - text("SELECT id, rule_type, rule_name FROM leaudit_rule_sets WHERE id = :rid AND delete_time IS NULL LIMIT 1"), + text("SELECT id, rule_type, rule_name FROM leaudit_rule_sets WHERE id = :rid AND deleted_at IS NULL LIMIT 1"), {"rid": RuleSetId}, ) RsRow = RuleSet.mappings().first() @@ -531,7 +531,7 @@ class RuleServiceImpl(IRuleService): Params["note"] = Note if SetClauses: - SetClauses.append("update_time = now()") + SetClauses.append("updated_at = now()") await Session.execute( text(f"UPDATE leaudit_rule_type_bindings SET {', '.join(SetClauses)} WHERE id = :bid"), Params, @@ -615,7 +615,7 @@ class RuleServiceImpl(IRuleService): WHEN id = :version_id THEN now() ELSE published_at END, - update_time = now() + updated_at = now() WHERE rule_set_id = :rule_set_id """ ), @@ -634,7 +634,7 @@ class RuleServiceImpl(IRuleService): SET current_version_id = :version_id, status = 'active', - update_time = now() + updated_at = now() WHERE id = :rule_set_id """ ), @@ -656,7 +656,7 @@ class RuleServiceImpl(IRuleService): SELECT id, rule_type, rule_name, domain_type, current_version_id, status FROM leaudit_rule_sets WHERE rule_type = :rule_type - AND delete_time IS NULL + AND deleted_at IS NULL LIMIT 1 """ ), diff --git a/new-rules/contract.lease.yaml b/new-rules/contract.lease.yaml new file mode 100644 index 0000000..47c8a92 --- /dev/null +++ b/new-rules/contract.lease.yaml @@ -0,0 +1,1567 @@ +# ═══════════════════════════════════════════════════════════════ +# 不动产租赁合同 — 评查规则库 +# ═══════════════════════════════════════════════════════════════ +# 依据《中华人民共和国民法典》合同编·通则(第467、470、490条) +# 及租赁合同章(第703-734条) +# 适用于房屋、办公场所、店铺等不动产租赁合同的评查 +# 覆盖签署前审查(draft)和签署后审计(executed)两个阶段 + +metadata: + type_id: contract.lease + name: 不动产租赁合同 + version: "2.0" + last_updated: "2026-04-14" + + classification_keywords: + - 租赁 + - 不动产 + - 房屋 + - 租房 + - 出租 + + tags: + - 合同 + - 租赁 + - 不动产 + - 房屋 + + description: | + 依据《中华人民共和国民法典》合同编·通则(第467、470、490条)及租赁合同章(第703-734条)。 + 适用于房屋、办公场所、店铺等不动产租赁合同的评查。 + 覆盖签署前审查(draft)和签署后审计(executed)两个阶段 + + references_laws: + - 《民法典》第四百六十七条 + - 《民法典》第四百七十条 + - 《民法典》第四百九十条 + - 《民法典》第七百零三条至第七百三十四条 + +# ───────────────────────────────────────────────────────────────── +# 字段抽取声明 +# required_from: 该字段从哪个阶段开始必需 +# draft → 起草阶段就必需(草稿没有也会被标记) +# executed → 仅已执行阶段必需(草稿可以缺失) +# 未声明 → 默认 executed +# ───────────────────────────────────────────────────────────────── + +extract: + # ── 合同基本信息 ── + - {name: 合同名称, type: verbatim, required_from: draft, description: 合同标题/项目名称} + - {name: 签约背景, type: string, required_from: draft, description: 合同签约背景/缘由(如招标方式、协商过程等开篇段落)} + - {name: 引用法律法规, type: string, required_from: draft, description: 合同引用的法律、法规、规章的列表} + - {name: 合同编号, type: verbatim, required_from: executed, description: 合同唯一编号} + - {name: 签约日期, type: date, required_from: executed, description: 合同签订日期} + - {name: 签约地点, type: verbatim, required_from: executed, description: 合同签订地点} + - {name: 合同份数, type: verbatim, required_from: executed, deep_retry: true, description: 合同总份数。从原文中找到"本合同一式X份"等表述,只抽取"一式X份"这几个字(如"一式肆份"、"一式四份")。不要包含后续的分配方式} + - {name: 生效条件, type: string, required_from: executed, description: 合同生效条件(签字盖章、经批准等)} + - {name: 附件列表, type: string, description: 合同附件的序号、名称、类型的列表} + - {name: 补充协议条款, type: string, description: 未尽事宜补充、补充协议效力等约定。注意:不包含合同份数、生效条件、争议解决等已有专门字段的内容。如合同中没有单独的补充协议条款,填空字符串} + + # ── 当事人 ── + - {name: 出租方, type: verbatim, required_from: draft, description: 出租方(甲方)全称,个人为姓名,单位为公司名} + - {name: 承租方, type: verbatim, required_from: draft, description: 承租方(乙方)全称} + - {name: 出租方负责人, type: verbatim, required_from: draft, description: 出租方负责人姓名(单位为法定代表人,个人为本人;如未列出可为空)} + - {name: 承租方负责人, type: verbatim, required_from: draft, description: 承租方负责人姓名(单位为法定代表人,个人为本人)} + - {name: 出租方地址, type: verbatim, required_from: draft, description: 出租方住址或注册地址} + - {name: 承租方地址, type: verbatim, required_from: draft, description: 承租方住址或注册地址} + - {name: 出租方联系电话, type: verbatim, required_from: draft, description: 出租方联系电话} + - {name: 承租方联系电话, type: verbatim, required_from: draft, description: 承租方联系电话} + - {name: 出租方证件号, type: verbatim, required_from: draft, description: 出租方身份证号(个人)或统一社会信用代码(单位)} + - {name: 承租方统一社会信用代码, type: verbatim, required_from: executed, description: 承租方18位统一社会信用代码(单位承租人)。签署阶段必填,draft 阶段可为空} + + # ── 租赁标的 ── + - {name: 租赁物描述, type: string, required_from: draft, description: 租赁物的名称、坐落地址、建筑面积的完整描述} + - {name: 租赁用途, type: string, required_from: draft, description: 租赁物的约定使用用途(居住、办公、商用等)} + - {name: 履行地点, type: verbatim, description: 租赁房屋坐落地点(履行地点)} + - {name: 出租方权属声明, type: string, description: 出租方对房屋所有权/处分权的明确承诺条款原文,以及产权纠纷的责任承担约定。关键词包括'承诺合法取得所有权''有权对房屋进行处分''产权证明''抵押/查封情况'等。若合同未约定,填空字符串} + + # ── 租金与支付 ── + - {name: 月租金金额, type: money, required_from: draft, description: 月租金数字金额(如有)} + - {name: 月租金大写, type: verbatim, required_from: draft, description: 月租金中文大写金额(保留原文,如'贰仟捌佰元整')} + - {name: 年租金金额, type: money, required_from: draft, description: 年租金数字金额(如有)} + - {name: 年租金大写, type: verbatim, required_from: draft, description: 年租金中文大写金额(保留原文)} + - {name: 租金结算方式, type: string, description: 实际采用的租金结算方式(月付/季付/年付/一次性等),根据付款条款判断} + - {name: 租金支付方式, type: string, required_from: draft, description: 付款周期、方式、时间节点、逾期处理的完整描述} + - {name: 收款方开户银行, type: verbatim, required_from: draft, description: 收款方(通常为出租方)银行开户行全称} + - {name: 收款方银行账号, type: verbatim, required_from: draft, description: 收款方银行账号} + - {name: 收款方账户名称, type: verbatim, required_from: draft, description: 收款方账户名称(与出租方主体一致)} + - {name: 租金是否含税, type: [是, 否], description: 租金金额是否已包含税费。填"是":合同中明确"含税"或"租金已包含税费";填"否":另行约定税费分担或未说明} + - {name: 约定押金, type: [是, 否], description: 合同中是否约定了押金、保证金或类似担保金额。填"是"的条件:明确约定"押金""保证金""定金"及其金额。填"否"的条件:未约定任何押金/保证金(一次性付清、无需担保等)} + + # ── 租赁期限 ── + - {name: 租赁起始日期, type: date, description: 租赁期限起始日期} + - {name: 租赁结束日期, type: date, description: 租赁期限结束日期} + + # ── 履行方式 ── + - {name: 交付方式, type: string, description: 房屋移交的方式和程序:交付时间、交付状态(空房/带装修/含家具)、钥匙和设施移交、验收程序。不含租金支付相关内容} + + # ── 条款 ── + - {name: 维修责任条款, type: string, description: 出租方和承租方的维修责任分工、费用负担} + - {name: 转租条款, type: string, description: 是否允许转租、转租条件的完整约定} + - {name: 退租返还条款, type: string, description: 租赁期满返还条件、返还状态、优先续租权的约定} + - {name: 违约责任条款, type: string, description: 违约责任的完整条款内容(双方违约情形和责任)} + - {name: 违约金金额, type: money, description: 违约金具体金额或计算基数} + - {name: 违约金计算方式, type: string, description: 违约金计算标准(固定金额/比例/按日计算等)} + - {name: 争议解决条款, type: string, description: 争议解决方式的完整条款(协商/诉讼/仲裁)} + - {name: 管辖机构, type: verbatim, description: 指定的法院或仲裁机构名称} + - {name: 不可抗力条款, type: string, description: 不可抗力定义、通知义务、免责约定的完整条款} + - {name: 变更解除终止条款, type: string, description: 合同变更、解除、终止的条件和程序} + + # ── 特殊约定 ── + - {name: 涉及保密信息, type: [是, 否], description: 合同中是否存在保密条款或涉及商业秘密、技术秘密。填"是"的条件:出现"保密""商业秘密""技术秘密""不得泄露"等关键词且有实质条款。填"否"的条件:普通房屋租赁,无任何保密相关条款} + + # ── 居间方(可选)── + - {name: 居间方名称, type: verbatim, description: 居间方/中介方公司全称(如有)} + - {name: 居间方服务费, type: string, description: 居间服务费金额及支付方式(如有),如'甲方1250元、乙方1250元'} + - {name: 居间方负责人, type: verbatim, description: 居间方法定代表人或负责人姓名(如有)} + - {name: 约定居间方, type: [是, 否], description: 合同中是否有居间方/中介方参与。填'是'的条件:出现'中介方''居间方''丙方''中介服务费'等关键词且有具体机构名称。填'否'的条件:甲乙双方直接签订,无任何中介参与} + +# ───────────────────────────────────────────────────────────────── +# 视觉元素声明 +# ───────────────────────────────────────────────────────────────── + +visual_elements: + seals: + - id: 出租方签章 + name: 出租方签字或公章 + required: true + required_from: executed + - id: 承租方签章 + name: 承租方盖章 + required: true + required_from: executed + cross_page_seals: + - id: 骑缝章 + name: 合同骑缝章 + required: true + required_from: executed + +# ───────────────────────────────────────────────────────────────── +# 规则列表 +# ───────────────────────────────────────────────────────────────── + +rules: + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-001 · 当事人信息齐全 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-001 + name: 当事人信息齐全 + risk: high + score: 4 + + stages: + - id: "1" + check: required + field: 出租方 + - id: "2" + check: required + field: 承租方 + + logic: "1 AND 2" + + messages: + pass: 出租方和承租方信息齐全 + fail: 缺少出租方或承租方信息 + + references_laws: + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-002 · 当事人信息准确完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-002 + name: 当事人信息准确完整 + risk: high + score: 3 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同当事人(出租方和承租方)的信息是否准确完整。 + + 出租方:{{出租方}} + 出租方负责人:{{出租方负责人}} + 出租方地址:{{出租方地址}} + 出租方联系电话:{{出租方联系电话}} + 出租方证件号:{{出租方证件号}} + + 承租方:{{承租方}} + 承租方负责人:{{承租方负责人}} + 承租方地址:{{承租方地址}} + 承租方联系电话:{{承租方联系电话}} + 承租方统一社会信用代码:{{承租方统一社会信用代码}} + + 评查要点: + 1. 双方主体名称是否清晰可辨(个人为姓名,单位为公司名) + 2. 出租方为个人时是否有身份证号;出租方为单位时是否有统一社会信用代码 + 3. 承租方为单位时是否有法定代表人 + 4. 双方联系地址和电话是否齐全 + + 特别说明:承租方统一社会信用代码属于签署阶段(executed)字段, + 在草稿阶段(draft)合同模板中为空是正常情况,不作为判 fail 依据。 + 只有在已签署的合同中(合同编号、签约日期已填写)仍缺失 USCC,才应判 fail。 + + 法规依据:民法典§470 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 当事人信息准确完整 + fail: 当事人信息有缺失或不准确 + + references_laws: + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-003 · 租赁标的明确 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-003 + name: 租赁标的明确 + risk: high + score: 4 + + stages: + - id: "1" + check: ai + prompt: | + 请检查租赁合同中租赁标的信息是否明确。 + + 租赁物描述:{{租赁物描述}} + 租赁用途:{{租赁用途}} + + 评查要点: + 1. 是否明确了租赁物的名称(房屋、办公场所、店铺等) + 2. 是否明确了租赁物的具体位置/地址 + 3. 是否明确了租赁物的面积/规格 + 4. 是否明确了租赁用途(居住、办公、商用等) + 5. 租赁用途应当合法且与租赁物性质相符 + + 法规依据:民法典§703、§704 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 租赁标的信息明确 + fail: 租赁标的信息不明确或不完整 + + references_laws: + - 《民法典》第七百零三条 + - 《民法典》第七百零四条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-004 · 租赁期限合规 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-004 + name: 租赁期限合规 + risk: high + score: 4 + + stages: + - id: "1" + check: required + field: 租赁起始日期 + - id: "2" + check: required + field: 租赁结束日期 + - id: "3" + check: ai + prompt: | + 请检查租赁合同的租赁期限是否合规。 + + 起始日期:{{租赁起始日期}} + 结束日期:{{租赁结束日期}} + 退租返还条款(含续租约定):{{退租返还条款}} + + 评查要点: + 1. 起止日期是否明确 + 2. 租赁期限是否超过二十年(超过二十年的部分无效) + 3. 租赁期限六个月以上的应当采用书面形式(本合同为书面) + 4. 如有续租约定,续租后累计期限是否可能超过二十年 + + 法规依据:民法典§705、§707 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1 AND 2 AND 3" + + messages: + pass: 租赁期限明确且合规 + fail: 租赁期限缺失或超过法定上限 + + references_laws: + - 《民法典》第七百零五条 + - 《民法典》第七百零七条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-005 · 年租金完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-005 + name: 年租金完整 + risk: high + score: 3 + + stages: + - id: "1" + check: required + field: 年租金金额 + - id: "2" + check: required + field: 年租金大写 + - id: "3" + check: amount_match + number: 年租金金额 + chinese: 年租金大写 + + logic: "1 AND 2 AND 3" + + messages: + pass: 年租金完整且大小写一致 + fail: 年租金缺失或大小写不一致(如有年租金金额,必须有对应的大写) + + references_laws: + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-005a · 月租金完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-005a + name: 月租金完整 + risk: medium + score: 1 + + stages: + - id: "1" + check: required + field: 月租金金额 + - id: "2" + check: required + field: 月租金大写 + - id: "3" + check: amount_match + number: 月租金金额 + chinese: 月租金大写 + + logic: "1 AND 2 AND 3" + + messages: + pass: 月租金完整且大小写一致 + fail: 月租金缺失或大小写不一致(如有月租金金额,必须有对应的大写) + + references_laws: + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-006 · 租金及支付方式完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-006 + name: 租金及支付方式完整 + risk: high + score: 4 + + stages: + - id: "1" + check: required + field: 租金支付方式 + - id: "2" + check: ai + prompt: | + 请检查租金支付方式是否完整。 + + 租金结算方式:{{租金结算方式}} + 月租金金额:{{月租金金额}} + 年租金金额:{{年租金金额}} + 租金支付方式:{{租金支付方式}} + 收款方开户银行:{{收款方开户银行}} + 收款方银行账号:{{收款方银行账号}} + + 评查要点: + 1. 支付方式是否明确(银行转账、现金等) + 2. 支付周期是否明确(月付、季付、年付、一次性等) + 3. 是否约定了逾期支付的后果(滞纳金、解除权等) + 4. 付款账户信息是否完整(开户行、账号、户名) + + 法规依据:民法典§721、§722 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1 AND 2" + + messages: + pass: 租金支付方式约定完整 + fail: 租金支付方式约定不完整 + + references_laws: + - 《民法典》第七百二十一条 + - 《民法典》第七百二十二条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-007 · 合同地点具体准确 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-007 + name: 合同地点具体准确 + risk: medium + score: 4 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同地点信息是否具体准确。 + + 履行地点(租赁房屋位置):{{履行地点}} + 签约地点:{{签约地点}} + 出租方地址:{{出租方地址}} + 承租方地址:{{承租方地址}} + + 评查要点: + 1. 租赁房屋的坐落地点是否具体(到具体门牌号/楼层) + 2. 签约地点是否明确 + 3. 双方地址是否完整可供送达 + + 法规依据:民法典§470 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 合同地点信息具体准确 + fail: 合同地点信息不具体或缺失 + + references_laws: + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-008 · 履行方式具体准确 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-008 + name: 履行方式具体准确 + risk: medium + score: 3 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同履行方式是否具体准确。 + + 交付方式:{{交付方式}} + 租赁用途:{{租赁用途}} + + 评查要点: + 1. 房屋交付时间和条件是否明确 + 2. 是否约定了钥匙、设施设备的移交 + 3. 交付状态(空房/带装修/带家具等)是否明确 + 4. 验收或确认程序是否约定 + + 法规依据:民法典§708、§709 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 履行方式具体明确 + fail: 履行方式不具体或缺失 + + references_laws: + - 《民法典》第七百零八条 + - 《民法典》第七百零九条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-009 · 维修责任约定 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-009 + name: 维修责任约定 + risk: medium + score: 3 + + stages: + - id: "1" + check: required + field: 维修责任条款 + - id: "2" + check: ai + prompt: | + 请检查维修责任条款是否明确。 + + 维修责任条款:{{维修责任条款}} + + 评查要点: + 1. 是否明确了出租方的维修义务范围(主体结构、设施设备等) + 2. 是否明确了承租方的维修义务范围(日常维护、合理使用等) + 3. 维修费用的承担方是否明确 + 4. 是否约定维修期间的租金处理(如长期维修时租金减免) + 5. 因承租方过错导致损坏的维修责任是否明确 + + 法规依据:民法典§712、§713 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1 AND 2" + + messages: + pass: 维修责任约定明确 + fail: 维修责任缺失或不明确 + + references_laws: + - 《民法典》第七百一十二条 + - 《民法典》第七百一十三条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-010 · 转租条款 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-010 + name: 转租条款 + risk: medium + score: 1 + + stages: + - id: "1" + check: required + field: 转租条款 + - id: "2" + check: ai + prompt: | + 请检查转租条款是否明确。 + + 转租条款:{{转租条款}} + + 评查要点: + 1. 是否明确约定了是否允许转租 + 2. 如允许转租,是否约定了转租的条件和程序(如需经出租方书面同意) + 3. 如禁止转租,是否明确了违反禁止转租的后果 + 4. 是否约定了转租后的责任承担 + + 法规依据:民法典§716、§717、§718 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1 AND 2" + + messages: + pass: 转租条款约定明确 + fail: 转租条款缺失或不明确 + + references_laws: + - 《民法典》第七百一十六条 + - 《民法典》第七百一十七条 + - 《民法典》第七百一十八条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-011 · 租赁物返还与退租 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-011 + name: 租赁物返还与退租 + risk: medium + score: 3 + + stages: + - id: "1" + check: required + field: 退租返还条款 + - id: "2" + check: ai + prompt: | + 请检查退租和返还条款是否完整。 + + 退租返还条款:{{退租返还条款}} + + 评查要点: + 1. 是否约定了租赁物返还的条件和时间 + 2. 是否约定了返还时租赁物应处的状态(恢复原状、正常损耗等) + 3. 是否约定了承租方的优先承租权(房屋租赁中法定享有) + 4. 是否约定了提前退租的条件和违约责任 + 5. 是否约定了租赁物返还时的交接验收程序 + + 法规依据:民法典§733、§734 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1 AND 2" + + messages: + pass: 退租及返还条款完整 + fail: 退租及返还条款不完整 + + references_laws: + - 《民法典》第七百三十三条 + - 《民法典》第七百三十四条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-012 · 违约责任形式明确 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-012 + name: 违约责任形式明确 + risk: high + score: 4 + + stages: + - id: "1" + check: required + field: 违约责任条款 + - id: "2" + check: ai + prompt: | + 请检查违约责任条款是否形式明确。 + + 违约责任条款:{{违约责任条款}} + + 评查要点: + 1. 是否明确了违约方和违约情形 + 2. 责任形式是否具体(支付违约金、赔偿损失、继续履行等) + 3. 是否覆盖双方(出租方违约和承租方违约均有约定) + 4. 是否有兜底条款(如未尽事宜如何处理) + + 法规依据:民法典§577 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1 AND 2" + + messages: + pass: 违约责任形式明确 + fail: 违约责任形式不明确或缺失 + + references_laws: + - 《民法典》第五百七十七条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-013 · 违约金条款完整合理 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-013 + name: 违约金条款完整合理 + risk: high + score: 6 + + stages: + - id: "1" + check: required + field: 违约金金额 + - id: "2" + check: ai + prompt: | + 请检查违约金条款是否完整合理。 + + 违约金金额:{{违约金金额}} + 违约金计算方式:{{违约金计算方式}} + 违约责任条款:{{违约责任条款}} + 月租金金额:{{月租金金额}} + 年租金金额:{{年租金金额}} + + 评查要点: + 1. 违约金金额或计算方式是否明确 + 2. 违约金标准是否合理(约定过高可依法调整,一般不超过造成损失的 30%) + 3. 是否约定了逾期支付租金的违约金 + 4. 是否覆盖双方违约情形 + + 法规依据:民法典§585 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1 AND 2" + + messages: + pass: 违约金条款完整合理 + fail: 违约金条款不完整或标准不合理 + + references_laws: + - 《民法典》第五百八十五条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-014 · 争议解决方式明确 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-014 + name: 争议解决方式明确 + risk: high + score: 3 + + stages: + - id: "1" + check: required + field: 争议解决条款 + - id: "2" + check: ai + prompt: | + 请检查争议解决方式是否明确。 + + 争议解决条款:{{争议解决条款}} + 管辖机构:{{管辖机构}} + + 评查要点: + 1. 是否明确了争议解决方式(协商/诉讼/仲裁,只能择一作为最终方式) + 2. 不能同时约定仲裁和诉讼(互斥) + 3. 如约定诉讼,是否指定了具体的管辖法院 + 4. 如约定仲裁,是否指定了具体的仲裁机构 + + 法规依据:民法典§470 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1 AND 2" + + messages: + pass: 争议解决方式明确 + fail: 争议解决方式不明确或约定冲突 + + references_laws: + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-016 · 不可抗力条款完整性 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-016 + name: 不可抗力条款完整性 + risk: medium + score: 2 + + stages: + - id: "1" + check: required + field: 不可抗力条款 + - id: "2" + check: ai + prompt: | + 请检查不可抗力条款是否完整(三要素)。 + + 不可抗力条款:{{不可抗力条款}} + + 评查要点(三要素): + 1. 是否明确了不可抗力的定义/类型范围 + 2. 是否约定了通知义务和通知时限 + 3. 是否约定了免责后果和合同处理方式(如延期履行、解除合同等) + + 法规依据:民法典§180、§590 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1 AND 2" + + messages: + pass: 不可抗力条款完整 + fail: 不可抗力条款缺失或要素不全 + + references_laws: + - 《民法典》第一百八十条 + - 《民法典》第五百九十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-017 · 变更解除终止条款完整性 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-017 + name: 变更解除终止条款完整性 + risk: high + score: 4 + + stages: + - id: "1" + check: ai + prompt: | + 请检查变更、解除、终止条款是否完整。 + + 变更解除终止条款:{{变更解除终止条款}} + + 评查要点: + 1. 是否约定了合同变更的条件和程序 + 2. 是否约定了合同解除/终止的条件(法定解除、约定解除、协商解除) + 3. 是否约定了终止通知期限 + 4. 是否有对己方(承租方)的保护条款 + 5. 是否约定了合同终止后的处理(结算、返还等) + + 法规依据:民法典§543、§562、§563 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 变更解除终止条款完整 + fail: 变更解除终止条款不完整 + + references_laws: + - 《民法典》第五百四十三条 + - 《民法典》第五百六十二条 + - 《民法典》第五百六十三条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-019 · 附件条款完整性 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-019 + name: 附件条款完整性 + risk: low + score: 1 + + stages: + - id: "1" + check: ai + prompt: | + 请检查附件条款是否具备基本形式要素。 + + 附件列表:{{附件列表}} + + 评查要点(满足任一核心要素即可 pass,多缺给 warn,全缺给 fail): + 1. 【核心】至少列明了附件的名称(如"屋内资产清单""权属证明""家私家电清单"等) + 2. 【加分】附件有序号标识(如"附件一"、"附件1") + 3. 【加分】附件与合同正文有引用或关联说明 + 4. 【加分】有"附件与合同具有同等法律效力"的声明 + + 注意:租赁合同中附件本身是可选的辅助材料,只要名称清晰就视为合格; + 只有完全缺失附件名称或无任何可识别附件信息时才判 fail。 + + 法规依据:民法典§470 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 附件条款已列明 + fail: 附件条款完全缺失 + + references_laws: + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-022 · 合同名称合法有效 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-022 + name: 合同名称合法有效 + risk: medium + score: 1 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同名称是否合法有效。 + + 合同名称:{{合同名称}} + 租赁物描述:{{租赁物描述}} + 租赁用途:{{租赁用途}} + + 评查要点: + 1. 合同名称必须与合同内容一致(名为"租赁合同"且实际为租赁关系) + 2. 符合民法典有名合同特征的应当采用标准合同名称(如"房屋租赁合同") + 3. 合同名称不应使用会引起误解的名称 + + 法规依据:民法典§467 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 合同名称与内容一致 + fail: 合同名称与内容不一致 + + references_laws: + - 《民法典》第四百六十七条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-015 · 管辖机构名称准确 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-015 + name: 管辖机构名称准确 + risk: medium + score: 3 + + stages: + - id: "1" + check: ai + prompt: | + 请检查管辖机构名称是否准确。 + + 管辖机构:{{管辖机构}} + 争议解决条款:{{争议解决条款}} + + 评查要点: + 1. 如约定诉讼,法院名称是否准确规范(如"XX市XX区人民法院",而非简称) + 2. 如约定仲裁,仲裁机构名称是否准确(如"中国国际经济贸易仲裁委员会") + 3. 指定的机构是否对本合同争议有管辖权 + 4. 名称不应模糊(如仅写"当地法院"是不合格的) + + 法规依据:民法典§470 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 管辖机构名称准确 + fail: 管辖机构名称不准确或模糊 + + references_laws: + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-018 · 生效条件明确性 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-018 + name: 生效条件明确性 + risk: medium + score: 3 + + stages: + - id: "1" + check: required + field: 生效条件 + - id: "2" + check: required + field: 合同份数 + + logic: "1 AND 2" + + messages: + pass: 生效条件和合同份数明确 + fail: 生效条件或合同份数缺失 + + references_laws: + - 《民法典》第五百零二条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-027 · 税务信息完整性 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-027 + name: 税务信息完整性 + risk: medium + score: 1 + + stages: + - id: "1" + check: ai + prompt: | + 请检查税务信息是否完整。 + + 租金支付方式:{{租金支付方式}} + 租金是否含税:{{租金是否含税}} + + 评查要点: + 1. 是否明确了租金是否含税(含税一口价或另行约定税费分担) + 2. 如租金含税,是否约定由谁开具发票 + 3. 如租金不含税,是否约定税费承担方 + + 法规依据:民法典§470 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 税务信息完整 + fail: 税务信息不完整 + + references_laws: + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-029 · 签署方详细信息校验 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-029 + name: 签署方详细信息校验 + risk: medium + score: 3 + + stages: + - id: "1" + check: required + field: 出租方 + - id: "2" + check: required + field: 承租方 + - id: "3" + check: required + field: 出租方地址 + - id: "4" + check: required + field: 承租方地址 + + logic: "1 AND 2 AND 3 AND 4" + + messages: + pass: 签署方详细信息完整 + fail: 签署方详细信息有缺失 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-021 · 签约背景与法律依据 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-021 + name: 签约背景与法律依据 + risk: high + score: 8 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同的签约背景和法律依据是否准确。 + + 签约背景:{{签约背景}} + 引用法律法规:{{引用法律法规}} + 生效条件:{{生效条件}} + 变更解除终止条款:{{变更解除终止条款}} + + 评查要点: + 1. 签约背景或缘由是否存在(如招标方式、协商过程、签约原因等) + 2. 合同依据的法律、法规、规章必须准确、有效(不能引用已废止的法律) + 3. 合同条款不违反法律禁止性规定,并具有实用性 + 4. 合同按法律法规规定的方式生效、变更、解除并办理相应手续 + + 法规依据:民法典§153、§502 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 签约背景存在且法律依据准确有效 + fail: 签约背景缺失或法律依据存在问题 + + references_laws: + - 《民法典》第一百五十三条 + - 《民法典》第五百零二条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-024 · 标的内容合法 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-024 + name: 标的内容合法 + risk: high + score: 3 + + stages: + - id: "1" + check: ai + prompt: | + 请检查租赁标的内容是否合法。 + + 租赁物描述:{{租赁物描述}} + 租赁用途:{{租赁用途}} + + 评查要点: + 1. 租赁物不违反法律、行政法规的强制性规定(如不得租赁违章建筑、查封财产等) + 2. 租赁用途不违反法律法规(如不得用于违法经营、危险品仓储等超出建筑设计用途的使用) + 3. 如涉及特殊用途(如商用、经营),是否具备相应资质或许可 + 4. 不违背公序良俗 + + 法规依据:民法典§153、§154 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 租赁标的内容合法 + fail: 租赁标的内容存在违法情形 + + references_laws: + - 《民法典》第一百五十三条 + - 《民法典》第一百五十四条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-025 · 合同主体合法有效 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-025 + name: 合同主体合法有效 + risk: high + score: 3 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同主体是否合法有效。 + + 出租方:{{出租方}} + 出租方证件号:{{出租方证件号}} + 承租方:{{承租方}} + 承租方统一社会信用代码:{{承租方统一社会信用代码}} + 承租方负责人:{{承租方负责人}} + + 评查要点: + 1. 承租方为单位时是否有法定代表人 + 2. 出租方身份证号或 USCC 是否齐全 + 3. 主体身份证明材料格式是否有效(身份证 18 位、USCC 18 位) + + 特别说明:承租方统一社会信用代码属于签署阶段(executed)字段, + 在草稿阶段(draft)合同模板中为空是正常情况,不作为判 fail 依据。 + 只有在已签署的合同中(合同编号、签约日期已填写)仍缺失 USCC,才应判 fail。 + + 出租方处分权请在 ZL-LEASE-026 专门检查,本规则不涉及。 + + 法规依据:民法典§143、§171 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 合同主体合法有效 + fail: 合同主体存在合法性问题 + + references_laws: + - 《民法典》第一百四十三条 + - 《民法典》第一百七十一条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-026 · 出租方处分权 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-026 + name: 出租方处分权 + risk: high + score: 3 + + stages: + - id: "1" + check: ai + prompt: | + 请检查出租方是否具有房屋处分权。 + + 出租方:{{出租方}} + 租赁物描述:{{租赁物描述}} + 出租方权属声明:{{出租方权属声明}} + + 评查要点: + 1. 合同中是否有出租方"合法取得所有权"或"有权对房屋进行处分"的承诺条款(重点看"出租方权属声明"字段) + 2. 是否约定了产权纠纷时的责任承担 + 3. 是否说明了权属证明(房产证、不动产权证、经济联合社证明等) + 4. 对商业租赁,是否涉及必要的经营许可资质 + + 注意:评判主要依据"出租方权属声明"字段。若该字段有明确的处分权承诺内容,判 pass 或 warn; + 若该字段为空或仅有模糊表述(如"双方协商一致"),判 fail。 + + 法规依据:民法典§505 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 出租方处分权已明示 + fail: 缺少出租方处分权说明 + + references_laws: + - 《民法典》第五百零五条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-028 · 合同基本信息完整性 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-028 + name: 合同基本信息完整性 + risk: high + score: 1 + applies_in: + - executed + + stages: + - id: "1" + check: required + field: 合同编号 + - id: "2" + check: required + field: 签约日期 + + logic: "1 AND 2" + + messages: + pass: 合同编号与签约日期已填写 + fail: 合同编号或签约日期缺失(草稿阶段可能未填写,签署后必须填写) + + references_laws: + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-030 · 银行账户信息完整性 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-030 + name: 银行账户信息完整性 + risk: medium + score: 1 + + stages: + - id: "1" + check: required + field: 收款方开户银行 + - id: "2" + check: required + field: 收款方银行账号 + - id: "3" + check: required + field: 收款方账户名称 + + logic: "1 AND 2 AND 3" + + messages: + pass: 收款方银行账户信息完整 + fail: 收款方银行账户信息不完整 + + references_laws: + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-031 · 签署信息完整性 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-031 + name: 签署信息完整性 + risk: high + score: 3 + applies_in: + - executed + + stages: + - id: "1" + check: required + field: 签约日期 + - id: "2" + check: required + field: 签约地点 + + logic: "1 AND 2" + + messages: + pass: 签约日期与签约地点已填写 + fail: 签约日期或签约地点缺失 + + references_laws: + - 《民法典》第四百九十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-032 · 骑缝章检查 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-032 + name: 骑缝章检查 + risk: medium + score: 3 + applies_in: + - executed + + stages: + - id: "1" + check: visual + element: 骑缝章 + + logic: "1" + + messages: + pass: 骑缝章齐全 + fail: 缺少骑缝章或骑缝章不规范 + + references_laws: + - 《民法典》第四百九十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-033 · 保密条款完整性 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-033 + name: 保密条款完整性 + risk: medium + score: 2 + activate_if: 涉及保密信息 == '是' + + stages: + - id: "1" + check: ai + prompt: | + 请检查保密条款是否完整(合同涉及保密信息时)。 + + 租赁物描述:{{租赁物描述}} + 租赁用途:{{租赁用途}} + + 评查要点(三要素): + 1. 是否明确了保密信息的范围(商业秘密、技术秘密、个人信息等) + 2. 是否约定了保密期限 + 3. 是否约定了违反保密义务的违约责任 + + 法规依据:民法典§501 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 保密条款完整 + fail: 保密条款要素不全 + + references_laws: + - 《民法典》第五百零一条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-034 · 押金/保证金条款 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-034 + name: 押金/保证金条款 + risk: medium + score: 2 + + stages: + - id: "1" + check: ai + prompt: | + 请检查押金/保证金条款是否完整。 + + 约定押金:{{约定押金}} + 租金支付方式:{{租金支付方式}} + 退租返还条款:{{退租返还条款}} + + 评查要点: + 1. **如果约定押金为"是"**:检查押金金额、退还条件、退还时间、可扣减情形是否明确,金额是否合理(一般为 1-3 个月租金) + 2. **如果约定押金为"否"或未明确**:给予预警,说明租赁合同通常应约定押金以保障出租方权益,建议补充 + + 法规依据:民法典§586、§587 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 押金条款完整 + fail: 押金条款缺失或要素不全(租赁合同建议约定押金) + + references_laws: + - 《民法典》第五百八十六条 + - 《民法典》第五百八十七条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-035 · 居间方条款完整性 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-035 + name: 居间方条款完整性 + risk: low + score: 2 + activate_if: 约定居间方 == '是' + + stages: + - id: "1" + check: ai + prompt: | + 请检查居间方/中介方条款是否完整(合同有居间方参与时)。 + + 居间方名称:{{居间方名称}} + 居间方服务费:{{居间方服务费}} + 居间方负责人:{{居间方负责人}} + + 评查要点: + 1. 居间方名称是否明确(公司全称) + 2. 居间服务费金额及支付方式是否明确(谁支付、支付金额、支付时间) + 3. 居间方责任界定是否清晰(见证服务、促成交易、纠纷责任划分) + 4. 服务费支付条件是否合理(如'合同取消不影响服务费收取'是否合理) + + 法规依据:民法典§961-965(居间合同) + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 居间方条款完整 + fail: 居间方条款要素不全(缺少名称、服务费或责任界定) + + references_laws: + - 《民法典》第九百六十一条 + - 《民法典》第九百六十三条 + - 《民法典》第九百六十五条 diff --git a/new-rules/contract.sale.yaml b/new-rules/contract.sale.yaml new file mode 100644 index 0000000..846d1f4 --- /dev/null +++ b/new-rules/contract.sale.yaml @@ -0,0 +1,963 @@ +metadata: + type_id: contract.sale + name: 通用买卖合同 + version: "2.1" + last_updated: "2026-04-12" + description: | + 依据《中华人民共和国民法典》合同编·通则(第470条)及买卖合同章(第595-647条)。 + 适用于一般货物/商品/设备/IT系统采购类买卖合同的评查。 + 原始规则来源:旧系统 01_买卖合同.json(10条买卖专项评查点)+ 通用合同评查点。 + tags: [合同, 买卖, 采购, 通用] + +# ───────────────────────────────────────────────────────────────── +# 字段抽取声明 +# required_from: 该字段从哪个阶段开始必需 +# draft → 起草阶段就必需(草稿没有也会被标记) +# executed → 仅已执行阶段必需(草稿可以缺失) +# 未声明 → 默认 executed +# ───────────────────────────────────────────────────────────────── + +extract: + # ── 合同成立要素 ── + - {name: 合同名称, type: verbatim, required_from: draft, description: 合同的完整名称/项目名称} + - {name: 甲方, type: verbatim, required_from: draft, description: 买方/采购方公司全称} + - {name: 乙方, type: verbatim, required_from: draft, description: 卖方/供应商公司全称} + - {name: 合同标的描述, type: string, required_from: draft, description: 合同交易的标的物/服务内容概述} + - {name: 合同金额, type: money, required_from: draft, description: 合同总金额(数字)。框架/年度采购合同无固定总价时填 0 或 null} + - {name: 合同金额大写, type: verbatim, required_from: draft, description: 合同总金额中文大写} + + # ── 主体资格 ── + - {name: 甲方法定代表人, type: verbatim, required_from: draft, description: 甲方法定代表人姓名} + - {name: 乙方法定代表人, type: verbatim, required_from: draft, description: 乙方法定代表人姓名} + - {name: 甲方地址, type: verbatim, required_from: draft, description: 甲方注册/办公地址} + - {name: 乙方地址, type: verbatim, required_from: draft, description: 乙方注册/办公地址} + - {name: 甲方统一社会信用代码, type: uscc, required_from: executed, description: 甲方18位统一社会信用代码} + - {name: 乙方统一社会信用代码, type: uscc, required_from: executed, description: 乙方18位统一社会信用代码} + + # ── 履约核心条款 ── + - {name: 付款方式, type: string, required_from: draft, description: 付款条件、比例、节点、方式的完整描述} + - {name: 交货期限, type: string, required_from: draft, description: 交货/交付时间要求} + - {name: 交货地点, type: verbatim, required_from: draft, description: 交货/送达地点} + - {name: 验收条款, type: string, required_from: draft, description: 验收标准、验收流程、初验终验时间和不合格处理} + - {name: 质保期条款, type: string, description: 质保期限、质保范围、故障响应时间和运维服务内容} + + # ── 买卖合同特有条款 ── + - {name: 风险转移条款, type: string, description: 标的物风险转移时点和交付确认方式} + - {name: 履约保证金条款, type: string, description: 保证金金额、缴纳方式、缴纳时间和退还条件} + - {name: 知识产权条款, type: string, description: 知识产权归属、使用许可范围和侵权责任} + - {name: 培训条款, type: string, description: 培训内容、培训方式和培训安排} + - {name: 标的清单明细, type: string, description: 标的清单(序号、名称、数量、单价等明细及总价)} + - {name: 招投标信息, type: string, description: 招标文件编号、项目编号、中标通知书等招投标依据} + + # ── 法定/必备条款 ── + - {name: 违约责任条款, type: string, required_from: draft, description: 违约责任的完整条款内容} + - {name: 争议解决条款, type: string, required_from: draft, description: 争议解决方式(法院/仲裁)的完整描述} + - {name: 不可抗力条款, type: string, description: 不可抗力相关条款的完整内容} + + # ── 签署要素 ── + - {name: 签约日期, type: date, required_from: executed, description: 合同签订日期} + - {name: 合同编号, type: verbatim, required_from: executed, description: 合同唯一编号} + + # ── 辅助信息 ── + - {name: 甲方联系人, type: verbatim, description: 甲方项目联系人姓名} + - {name: 甲方联系电话, type: verbatim, description: 甲方联系电话} + - {name: 乙方联系人, type: verbatim, description: 乙方项目联系人姓名} + - {name: 乙方联系电话, type: verbatim, description: 乙方联系电话} + - {name: 甲方开户银行, type: verbatim, description: 甲方银行开户行名称} + - {name: 甲方银行账号, type: verbatim, description: 甲方银行账号} + + # ── 其他条款 ── + - {name: 保密条款, type: string, description: 保密义务相关条款内容,如有附件总结内容限制在100字内} + +# ───────────────────────────────────────────────────────────────── +# 规则列表 +# ───────────────────────────────────────────────────────────────── + +rules: + + # ═══════════════════════════════════════════════════════════ + # MM-SALE-001 · 合同主体齐全 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-001 + name: 合同主体齐全 + risk: high + score: 7 + + stages: + - id: "1" + check: required + field: 甲方 + - id: "2" + check: required + field: 乙方 + + logic: "1 AND 2" + + messages: + pass: 甲乙方信息完整 + fail: 缺少甲方或乙方信息 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-002 · 标的物与金额必填 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-002 + name: 标的物与金额必填 + risk: high + score: 7 + + stages: + - id: "1" + check: required + field: 合同标的描述 + - id: "2" + check: required + field: 合同金额 + + logic: "1 AND 2" + + messages: + pass: 标的物与金额信息完整 + fail: 缺少标的物描述或合同金额 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-003 · 合同名称必填 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-003 + name: 合同名称必填 + risk: medium + score: 3 + + stages: + - id: "1" + check: required + field: 合同名称 + + logic: "1" + + messages: + pass: 合同名称已填写 + fail: 缺少合同名称 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-004 · 法定代表人齐全 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-004 + name: 法定代表人齐全 + risk: medium + score: 3 + + stages: + - id: "1" + check: required + field: 甲方法定代表人 + - id: "2" + check: required + field: 乙方法定代表人 + + logic: "1 AND 2" + + messages: + pass: 甲乙方法定代表人信息完整 + fail: 缺少甲方或乙方法定代表人信息 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-005 · 交货期限必填 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-005 + name: 交货期限必填 + risk: high + score: 6 + + stages: + - id: "1" + check: required + field: 交货期限 + + logic: "1" + + messages: + pass: 交货期限已约定 + fail: 交货期限未约定 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-006 · 验收条款存在 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-006 + name: 验收条款存在 + risk: high + score: 5 + + stages: + - id: "1" + check: required + field: 验收条款 + + logic: "1" + + messages: + pass: 验收条款存在 + fail: 缺少验收条款 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-007 · 违约责任条款存在 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-007 + name: 违约责任条款存在 + risk: high + score: 6 + + stages: + - id: "1" + check: required + field: 违约责任条款 + + logic: "1" + + messages: + pass: 违约责任条款存在 + fail: 缺少违约责任条款 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-008 · 争议解决条款存在 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-008 + name: 争议解决条款存在 + risk: medium + score: 3 + + stages: + - id: "1" + check: required + field: 争议解决条款 + + logic: "1" + + messages: + pass: 争议解决条款存在 + fail: 缺少争议解决条款 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-009 · 培训条款存在 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-009 + name: 培训条款存在 + risk: low + score: 1 + + stages: + - id: "1" + check: required + field: 培训条款 + + logic: "1" + + messages: + pass: 培训条款已约定 + fail: 培训条款缺失 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-010 · 签约日期必填 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-010 + name: 签约日期必填 + risk: high + score: 5 + applies_in: + - executed + + stages: + - id: "1" + check: required + field: 签约日期 + + logic: "1" + + messages: + pass: 签约日期已填写 + fail: 缺少签约日期 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-011 · 合同编号必填 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-011 + name: 合同编号必填 + risk: medium + score: 1 + applies_in: + - executed + + stages: + - id: "1" + check: required + field: 合同编号 + + logic: "1" + + messages: + pass: 合同编号已填写 + fail: 缺少合同编号 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-012 · 甲方信用代码校验 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-012 + name: 甲方信用代码校验 + risk: medium + score: 3 + applies_in: + - executed + + stages: + - id: "1" + check: format + field: 甲方统一社会信用代码 + format: uscc + + logic: "1" + + messages: + pass: 甲方统一社会信用代码校验通过 + fail: 甲方统一社会信用代码校验位错误 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-013 · 乙方信用代码校验 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-013 + name: 乙方信用代码校验 + risk: medium + score: 3 + applies_in: + - executed + + stages: + - id: "1" + check: format + field: 乙方统一社会信用代码 + format: uscc + + logic: "1" + + messages: + pass: 乙方统一社会信用代码校验通过 + fail: 乙方统一社会信用代码校验位错误 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-014 · 金额大小写一致 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-014 + name: 金额大小写一致 + risk: high + score: 6 + + stages: + - id: "1" + check: amount_match + number: 合同金额 + chinese: 合同金额大写 + + logic: "1" + + messages: + pass: 金额大小写一致 + fail: 合同金额数字与大写不一致 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-015 · 金额为正数 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-015 + name: 金额为正数 + risk: low + score: 1 + + stages: + - id: "1" + check: compare + left: 合同金额 + op: ">" + right: 0 + + logic: "1" + + messages: + pass: 合同金额为正数 + fail: 合同金额不为正数 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-016 · 签约日期不是未来 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-016 + name: 签约日期不是未来 + risk: low + score: 1 + applies_in: + - executed + + stages: + - id: "1" + check: assert + expr: "parse_date(签约日期) != None and (today() - parse_date(签约日期)).days >= 0 and (today() - parse_date(签约日期)).days <= 3650" + + logic: "1" + + messages: + pass: 签约日期在合理范围内 + fail: 签约日期为未来日期或距今超过10年 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-017 · 验收条款完整(标的物检验期限约定) + # 来源: NR-MM-002 · 民法典第620-622条 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-017 + name: 验收条款完整 + risk: high + score: 3 + + stages: + - id: "1" + check: required + field: 验收条款 + - id: "2" + check: ai + prompt: | + 请检查合同的验收/检验条款是否完整。 + + 验收条款:{{验收条款}} + + 评查要点(依据民法典第620-622条): + 1. 是否约定了明确的检验/验收期限 + 2. 是否约定了验收标准(国家标准、行业标准、招标文件要求等) + 3. 是否约定了验收流程(谁组织、谁参与) + 4. 检验期限是否合理 + + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" + + logic: "1 AND 2" + + messages: + pass: 验收条款完整 + fail: 验收条款不完整 + + # 来源: NR-MM-003 交货期限明确性 — §601-602(已被 MM-SALE-005 覆盖) + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-018 · 风险转移条款明确 + # 来源: NR-MM-004 · 民法典第604-607条 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-018 + name: 风险转移条款明确 + risk: medium + score: 1 + + stages: + - id: "1" + check: required + field: 风险转移条款 + - id: "2" + check: ai + prompt: | + 请检查合同中是否有关于标的物/服务交付后风险转移的约定。 + + 风险转移条款:{{风险转移条款}} + + 评查要点(依据民法典第604-607条): + 1. 是否明确了风险转移的时点(交付时、验收时或其他约定时点) + 2. 对于软件/系统类标的,风险转移通常与验收挂钩 + + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" + + logic: "1 AND 2" + + messages: + pass: 风险转移条款约定明确 + fail: 风险转移条款缺失或不明确 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-019 · 质保期条款完整 + # 来源: NR-MM-005 · 民法典第617、621条 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-019 + name: 质保期条款完整 + risk: high + score: 3 + + stages: + - id: "1" + check: required + field: 质保期条款 + - id: "2" + check: ai + prompt: | + 请检查合同的质保条款是否完整。 + + 质保条款:{{质保期条款}} + + 评查要点(依据民法典第617、621条): + 1. 质保期限是否明确(起算时间、结束时间) + 2. 质保范围是否清晰(哪些属于质保范围内、哪些除外) + 3. 故障响应时间是否合理 + 4. 是否约定了质保期内的服务标准 + + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" + + logic: "1 AND 2" + + messages: + pass: 质保期条款完整 + fail: 质保期条款不完整 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-020 · 履约保证金条款完整 + # 来源: NR-MM-006 · 民法典第586-587条 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-020 + name: 履约保证金条款完整 + risk: medium + score: 3 + + stages: + - id: "1" + check: required + field: 履约保证金条款 + - id: "2" + check: ai + prompt: | + 请检查合同中履约保证金条款是否完整。 + + 保证金条款:{{履约保证金条款}} + + 评查要点(依据民法典第586-587条): + 1. 保证金金额是否明确 + 2. 缴纳时间和方式是否清楚 + 3. 退还条件是否合理、具体 + 4. 退还时间是否明确 + 5. 保证金比例一般不超过合同金额的10% + + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" + + logic: "1 AND 2" + + messages: + pass: 履约保证金条款完整 + fail: 履约保证金条款不完整 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-021 · 分期付款条款合理 + # 来源: NR-MM-009 · 民法典第626-634条 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-021 + name: 分期付款条款合理 + risk: high + score: 4 + + stages: + - id: "1" + check: required + field: 付款方式 + - id: "2" + check: required + field: 合同金额 + - id: "3" + check: ai + prompt: | + 请审查合同分期付款条款的合理性。 + + 付款条款:{{付款方式}} + 合同总金额:{{合同金额}} + 联合采购信息:{{联合采购信息}} + + 评查要点(依据民法典第626-634条): + 1. 各期付款比例之和是否覆盖应付总额(联合采购时:各期比例之和=本单位分摊比例即为100%覆盖,如4单位各付25%,则5%+10%+10%=25%=该单位全额,判为pass) + 2. 预付款不超过30% + 3. 付款节点与交付验收挂钩 + 4. 有付款前置条件(发票、验收报告等) + 请简洁回答,reason不超过100字。 + + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" + + logic: "1 AND 2 AND 3" + + messages: + pass: 分期付款条款合理 + fail: 分期付款条款存在问题 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-022 · 知识产权条款完整 + # 来源: NR-MM-007 · 民法典第600条 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-022 + name: 知识产权条款完整 + risk: high + score: 3 + + stages: + - id: "1" + check: required + field: 知识产权条款 + - id: "2" + check: ai + prompt: | + 请检查合同中知识产权条款是否完整。 + + 知识产权条款:{{知识产权条款}} + + 评查要点(依据民法典第600条): + 1. 是否明确了知识产权的归属(买方/卖方/共有) + 2. 是否约定了使用许可的范围和方式 + 3. 是否约定了第三方知识产权侵权的责任承担 + 4. 对于软件/系统类采购,应特别关注源代码、数据归属 + + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" + + logic: "1 AND 2" + + messages: + pass: 知识产权条款完整 + fail: 知识产权条款不完整 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-023 · 标的清单金额校验 + # 来源: NR-MM-012 · 民法典第595-596条 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-023 + name: 标的清单金额校验 + risk: high + score: 4 + + stages: + - id: "1" + check: required + field: 标的清单明细 + - id: "2" + check: required + field: 合同金额 + - id: "3" + check: ai + prompt: | + 请校验合同标的清单的金额一致性。 + + 标的清单明细:{{标的清单明细}} + 合同总金额:{{合同金额}} + + 评查要点(依据民法典第595-596条): + 1. 各项单价x数量是否等于对应项总价(逐项计算校验) + 2. 标的清单总价是否等于合同总金额 + 3. 服务范围描述是否足够具体(非含糊表述) + + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" + + logic: "1 AND 2 AND 3" + + messages: + pass: 标的清单金额校验通过 + fail: 标的清单金额不一致或服务范围不明确 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-024 · 招投标信息引用完整 + # 来源: NR-MM-014 · 民法典第644条 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-024 + name: 招投标信息引用完整 + risk: high + score: 3 + + stages: + - id: "1" + check: required + field: 招投标信息 + - id: "2" + check: ai + prompt: | + 请检查合同是否明确引用了招投标文件。 + + 招投标信息:{{招投标信息}} + + 评查要点: + 1. 合同是否引用了招标文件编号/项目编号 + 2. 合同是否将招标文件、投标文件作为合同附件或组成部分 + 3. 合同主要条款不应实质性变更招投标内容 + + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" + + logic: "1 AND 2" + + messages: + pass: 合同与招投标文件一致 + fail: 合同与招投标文件引用不完整 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-025 · 违约责任条款充分 + # 合规性 · AI 语义判断 · 民法典第577-585条 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-025 + name: 违约责任条款充分 + risk: medium + score: 4 + + stages: + - id: "1" + check: required + field: 违约责任条款 + - id: "2" + check: ai + prompt: | + 请判断以下违约责任条款是否充分、合规。 + + 条款内容:{{违约责任条款}} + + 充分的违约责任条款应当(依据民法典第577-585条): + 1. 明确违约情形(如逾期付款、逾期交货、质量不合格等) + 2. 明确违约金计算方式或赔偿标准 + 3. 不能只是笼统的模糊表述 + 4. 应当对双方的违约责任都有约定 + + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" + + logic: "1 AND 2" + + messages: + pass: 违约责任条款充分 + fail: 违约责任条款不充分 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-026 · 争议解决方式明确 + # 合规性 · AI 语义判断 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-026 + name: 争议解决方式明确 + risk: medium + score: 4 + + stages: + - id: "1" + check: required + field: 争议解决条款 + - id: "2" + check: ai + prompt: | + 请判断以下争议解决条款是否符合法律要求。 + + 条款内容:{{争议解决条款}} + + 合规的争议解决条款应当: + 1. 明确指定具体的争议解决方式(仲裁或诉讼,二选一) + 2. 如选择仲裁,应明确仲裁机构名称 + 3. 如选择诉讼,应明确管辖法院 + 4. 不能同时约定仲裁和诉讼 + + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" + + logic: "1 AND 2" + + messages: + pass: 争议解决方式明确 + fail: 争议解决条款未明确具体的仲裁机构/管辖法院 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-027 · 付款条款明确 + # 合规性 · AI 语义判断 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-027 + name: 付款条款明确 + risk: medium + score: 4 + + stages: + - id: "1" + check: required + field: 付款方式 + - id: "2" + check: ai + prompt: | + 请判断以下付款条款是否明确。 + + 条款内容:{{付款方式}} + + 明确的付款条款应当包含: + 1. 付款金额或比例 + 2. 付款时间节点或触发条件 + 3. 付款方式(如银行转账) + + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" + + logic: "1 AND 2" + + messages: + pass: 付款条款明确 + fail: 付款条款不够明确 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-028 · 保密条款完整 + # 合规性 · AI 语义判断 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-028 + name: 保密条款完整 + risk: low + score: 3 + + stages: + - id: "1" + check: required + field: 保密条款 + - id: "2" + check: ai + prompt: | + 请判断以下保密条款是否完整。 + + 条款内容:{{保密条款}} + + 完整的保密条款应当包含: + 1. 保密信息的范围定义 + 2. 保密义务的期限 + 3. 违反保密义务的法律后果 + + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" + + logic: "1 AND 2" + + messages: + pass: 保密条款完整 + fail: 保密条款不够完整 diff --git a/new-rules/contract.tech.yaml b/new-rules/contract.tech.yaml new file mode 100644 index 0000000..314001b --- /dev/null +++ b/new-rules/contract.tech.yaml @@ -0,0 +1,1455 @@ +# ═══════════════════════════════════════════════════════════════ +# 技术合同(技术开发/技术服务/采购) — 评查规则库 +# ═══════════════════════════════════════════════════════════════ +# 依据《中华人民共和国民法典》合同编通则(第470条) +# 及技术合同章(第843-887条)及相关法规 +# 适用于信息系统建设、软件开发、数据服务、平台采购等技术类合同的评查 +# 覆盖签署前审查(draft)和签署后审计(executed)两个阶段 + +metadata: + type_id: contract.tech + name: 技术合同(技术开发/技术服务/采购) + version: "1.0" + last_updated: "2026-04-14" + + classification_keywords: + - 技术开发 + - 技术服务 + - 技术咨询 + - 软件开发 + - 系统建设 + - 平台采购 + + tags: + - 合同 + - 技术 + - 开发 + - 服务 + - 采购 + + description: | + 依据《中华人民共和国民法典》合同编通则(第470条)、技术合同章(第843-887条)及相关法规。 + 适用于信息系统建设、软件开发、数据服务、平台采购等技术类合同的评查。 + 覆盖签署前审查(draft)和签署后审计(executed)两个阶段。 + 合并通用合同规则与技术合同专有规则,共 37 条评查规则。 + +# ───────────────────────────────────────────────────────────────── +# 字段抽取声明 +# required_from: 该字段从哪个阶段开始必需 +# draft → 起草阶段就必需(草稿没有也会被标记) +# executed → 仅已执行阶段必需(草稿可以缺失) +# 未声明 → 默认 executed +# ───────────────────────────────────────────────────────────────── + +extract: + # ── 合同基本信息 ── + - {name: 合同名称, type: verbatim, required_from: draft, description: 合同的完整名称} + - {name: 签约背景, type: string, required_from: draft, description: 签约背景、缘由或项目依据} + - {name: 引用法律法规, type: string, required_from: draft, description: 合同中引用的法律、法规名称} + - {name: 合同编号, type: verbatim, required_from: executed, description: 合同唯一编号} + - {name: 签约日期, type: date, required_from: executed, description: 合同签订日期} + - {name: 签约地点, type: verbatim, required_from: executed, description: 合同签订地点} + - {name: 合同份数, type: integer, required_from: executed, description: 合同正本份数} + - {name: 生效条件, type: string, required_from: executed, description: 合同生效的条件描述} + - {name: 审批情况, type: string, required_from: draft, description: 合同审批流程或审批信息} + + # ── 当事人 ── + - {name: 甲方, type: verbatim, required_from: draft, description: 甲方(委托方/采购方)公司全称} + - {name: 乙方, type: verbatim, required_from: draft, description: 乙方(开发方/服务方)公司全称} + - {name: 甲方法定代表人, type: verbatim, required_from: draft, description: 甲方法定代表人或负责人姓名} + - {name: 乙方法定代表人, type: verbatim, required_from: draft, description: 乙方法定代表人姓名} + - {name: 甲方地址, type: verbatim, required_from: draft, description: 甲方注册或办公地址} + - {name: 乙方地址, type: verbatim, required_from: draft, description: 乙方注册或办公地址} + - {name: 甲方联系人, type: verbatim, required_from: draft, description: 甲方项目联系人姓名} + - {name: 甲方联系电话, type: verbatim, required_from: draft, description: 甲方联系电话} + - {name: 乙方联系人, type: verbatim, required_from: draft, description: 乙方项目联系人姓名} + - {name: 乙方联系电话, type: verbatim, required_from: draft, description: 乙方联系电话} + - {name: 甲方统一社会信用代码, type: uscc, required_from: draft, description: 甲方18位统一社会信用代码} + - {name: 乙方统一社会信用代码, type: uscc, required_from: draft, description: 乙方18位统一社会信用代码} + - {name: 甲方资质信息, type: string, required_from: draft, description: 甲方相关资质证明描述} + - {name: 乙方资质信息, type: string, required_from: draft, description: 乙方资质证明、从业资格等描述} + - {name: 甲方授权委托信息, type: string, required_from: draft, description: 甲方签约代表的授权委托书信息} + - {name: 乙方授权委托信息, type: string, required_from: draft, description: 乙方签约代表的授权委托书信息} + + # ── 银行账户 ── + - {name: 甲方开户银行, type: verbatim, required_from: draft, description: 甲方银行开户行名称} + - {name: 甲方银行账号, type: verbatim, required_from: draft, description: 甲方银行账号} + - {name: 乙方开户银行, type: verbatim, required_from: draft, description: 乙方银行开户行名称} + - {name: 乙方银行账号, type: verbatim, required_from: draft, description: 乙方银行账号} + + # ── 标的与技术 ── + - {name: 合同标的描述, type: string, required_from: draft, description: 合同标的/服务内容的完整描述} + - {name: 技术方案, type: string, required_from: draft, description: 技术实现方案:定性+半定量描述"怎么做"(架构/方法论)。包括技术路线、架构设计、开发方法论、技术栈选择。负向约束:不要抽取商务条款、交付要求、验收标准} + - {name: 技术目标, type: string, required_from: draft, description: 技术目标:定性描述"做什么",即项目要达成的业务/功能目标。包括建设什么系统、实现什么功能。负向约束:不要抽取量化指标、商务条款、交付时间} + - {name: 技术指标, type: string, required_from: draft, description: 技术指标:纯定量描述"做到什么程度"(必须有数字+单位)。包括并发用户数、响应时间、吞吐量、容量、准确率等。严禁抽取商务条款、交付条款、验收条款、服务条款} + - {name: 技术标准规范, type: string, required_from: draft, description: 系统开发建设需遵循的技术标准、规范文件(编码规范、接口标准、安全标准、性能标准等)} + - {name: 质量标准, type: string, required_from: draft, description: 质量要求、检验方法的描述} + + # ── 验收 ── + - {name: 验收标准, type: string, required_from: draft, description: 功能验收、性能验收、安全验收等各项标准} + - {name: 验收流程, type: string, required_from: draft, description: 验收组织方、参与方、步骤、期限} + - {name: 不合格处理, type: string, required_from: draft, description: 验收不合格时的整改要求和处理方式} + + # ── 金额与支付 ── + - {name: 合同金额, type: money, required_from: draft, description: 合同含税总金额(数字)} + - {name: 合同金额大写, type: verbatim, required_from: draft, description: 合同含税总金额中文大写} + - {name: 不含税金额, type: money, required_from: draft, description: 不含税金额} + - {name: 税率, type: string, required_from: draft, description: 增值税税率(如6%、13%)} + - {name: 税额, type: money, required_from: draft, description: 增值税税额} + - {name: 付款方式, type: string, required_from: draft, description: 付款方式(银行转账/现金等)及完整描述} + - {name: 付款条件, type: string, required_from: draft, description: 付款阶段、比例、条件和期限的完整描述} + - {name: 附加标的物价款标准, type: string, required_from: draft, description: 附加/额外服务的价款标准约定} + + # ── 期限与地点 ── + - {name: 合同起始日期, type: date, required_from: draft, description: 合同有效期起始日期} + - {name: 合同终止日期, type: date, required_from: draft, description: 合同有效期终止日期} + - {name: 合同期限描述, type: string, required_from: draft, description: 合同期限的文字描述} + - {name: 履行地点, type: verbatim, required_from: draft, description: 项目实施/服务提供的地点} + - {name: 实施计划, type: string, required_from: draft, description: 实施阶段划分、里程碑节点、交付时间} + - {name: 交付物, type: string, required_from: draft, description: 各阶段应交付的成果物清单} + + # ── 条款 ── + - {name: 知识产权条款, type: string, required_from: draft, description: 知识产权归属、使用许可、后续改进的完整条款} + - {name: 技术风险条款, type: string, required_from: draft, description: 技术风险分担方式、通知义务的约定} + - {name: 技术支持条款, type: string, required_from: draft, description: 技术支持方式、响应时间、质保期约定} + - {name: 资料移交清单, type: string, required_from: draft, description: 应移交的技术资料清单(文档、源代码、操作手册等)} + - {name: 违约责任条款, type: verbatim, required_from: draft, description: 违约责任/违约条款的完整内容(原文逐字抽取,用于费用相关评查)} + - {name: 争议解决条款, type: string, required_from: draft, description: 争议解决方式及管辖机构的完整描述} + - {name: 不可抗力条款, type: string, required_from: draft, description: 不可抗力相关条款的完整内容} + - {name: 变更解除终止条款, type: string, required_from: draft, description: 合同变更、解除、终止的条件和程序} + - {name: 保密条款, type: string, required_from: draft, description: 保密义务相关条款内容(含正文及附件保密协议)} + - {name: 附件清单, type: string, required_from: draft, description: 合同附件的列表(序号、名称、类型)} + - {name: 补充协议条款, type: string, required_from: draft, description: 补充协议相关条款} + +# ───────────────────────────────────────────────────────────────── +# 规则列表 +# ───────────────────────────────────────────────────────────────── + +rules: + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-001 · 合同基本信息完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-001 + name: 合同基本信息完整 + risk: high + score: 2 + applies_in: + - executed + + stages: + - id: "1" + check: required + field: 合同名称 + - id: "2" + check: required + field: 合同编号 + - id: "3" + check: required + field: 签约日期 + + logic: "1 AND 2 AND 3" + + messages: + pass: 合同名称、编号、签约日期齐全 + fail: 合同名称、编号或签约日期缺失 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-002 · 合同名称合法有效 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-002 + name: 合同名称合法有效 + risk: medium + score: 2 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同名称是否与合同内容一致。 + 合同名称:{{合同名称}} + 合同标的描述:{{合同标的描述}} + + 评查要点(依据民法典第467条): + 1. 合同名称必须与合同实际内容一致(如名为"采购合同"但实际为技术服务则不一致) + 2. 符合民法典有名合同特征的,应当采用标准名称或不会使人误解的通称 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 合同名称与内容一致 + fail: 合同名称与内容不一致 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-003 · 签约背景与法律依据 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-003 + name: 签约背景与法律依据 + risk: high + score: 4 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同的签约背景和法律依据是否准确。 + 签约背景:{{签约背景}} + 引用法律法规:{{引用法律法规}} + + 评查要点: + 1. 签约背景或缘由是否存在(1分) + 2. 合同依据的法律、法规必须准确、有效,不得引用已废止的法律(4分) + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明", "score": 0-5} + + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 签约背景存在且法律依据准确有效 + fail: 签约背景缺失或法律依据存在问题 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-004 · 当事人信息准确完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-004 + name: 当事人信息准确完整 + risk: high + score: 2 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同各方当事人的信息是否准确完整。 + 甲方名称:{{甲方}},法定代表人:{{甲方法定代表人}},地址:{{甲方地址}},联系电话:{{甲方联系电话}} + 乙方名称:{{乙方}},法定代表人:{{乙方法定代表人}},地址:{{乙方地址}},联系电话:{{乙方联系电话}} + + 评查要点(依据民法典第470条第1项): + 1. 各方企业名称、法定代表人、地址、联系方式是否齐全 + 2. 各项信息在合同正文中是否前后一致 + 3. 如为自然人,应有姓名、身份证号、住址、联系电话 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 当事人信息完整一致 + fail: 当事人信息不完整或不一致 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-005 · 合同主体合法有效 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-005 + name: 合同主体合法有效 + risk: high + score: 2 + + stages: + - id: "1" + check: ai + prompt: | + 请检查该签署方的合同主体是否合法有效。 + 名称:{{甲方}} + 签约代表:{{甲方法定代表人}} + 授权委托信息:{{甲方授权委托信息}} + 对方名称:{{乙方}} + 签约代表:{{乙方法定代表人}} + 授权委托信息:{{乙方授权委托信息}} + + 评查要点(依据民法典第143条、第171条): + 1. 如为企业法人,签订期限应在经营期限内 + 2. 代理人签订合同的,应提供合法、有效、明确的授权书 + 3. 如为分支机构签订,应在法人授权范围内 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 合同主体合法有效 + fail: 合同主体合法性存疑 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-006 · 合同主体资质合格 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-006 + name: 合同主体资质合格 + risk: high + score: 3 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同对方主体的资质是否合格。 + 对方名称:{{乙方}} + 资质信息:{{乙方资质信息}} + 服务类型:{{合同标的描述}} + + 评查要点(依据民法典第505条): + 1. 对方提供的资质证明必须符合法律法规规章规定的相应等级 + 2. 从业人员必须具备相应资格,确保具有足够的履行合同能力 + 3. 技术合同中乙方应具备相应的技术开发/服务能力资质 + + 注意:如合同标的不涉及特定资质要求,可直接PASS。 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 合同主体资质合格或不涉及特定资质 + fail: 合同主体资质可能不合格 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-007 · 标的内容合法 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-007 + name: 标的内容合法 + risk: high + score: 2 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同标的是否合法。 + 标的描述:{{合同标的描述}} + + 评查要点(依据民法典第153条、第154条): + 1. 标的是否属于法律禁止交易的服务或内容 + 2. 是否涉及特殊行业许可要求 + 3. 合同标的是否违反法律禁止性规定或公序良俗 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 合同标的内容合法 + fail: 合同标的合法性存疑 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-008 · 合同标的准确完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-008 + name: 合同标的准确完整 + risk: high + score: 10 + + stages: + - id: "1" + check: ai + prompt: | + 请检查技术合同的标的信息是否准确完整。 + 合同标的描述:{{合同标的描述}} + 技术方案:{{技术方案}} + 技术目标:{{技术目标}} + 技术指标:{{技术指标}} + + 评查要点(依据民法典第470条第2项、第510条): + 1. 合同标的描述:是否列出了具体的功能模块和服务范围(不能只有"详见招标文件"等含糊表述) + 2. 技术方案:是否说明了如何实现(技术路线、架构、方法论),不能只有功能罗列 + 3. 技术目标:是否说明了要达成什么业务效果(建设什么系统、实现什么功能),定性描述 + 4. 技术指标:是否包含量化指标(性能参数、响应时间、并发数等),必须有具体数字 + + 容错规则(重要): + - 如果"技术指标"中混入了商务条款(如付款、违约金、保证金、交货期、质保期等),这属于数据抽取问题,不应判定为"标的不完整"。请在 reason 中指出"技术指标字段混入了商务条款,但不影响标的完整性判定",并基于现有的性能参数部分进行判定。 + - 只有当技术指标完全为空、或完全没有性能参数时,才判定为不完整。 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明(需指出哪个字段存在问题)"} + + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 标的信息准确完整 + fail: 标的信息不完整或过于模糊 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-009 · 技术标准与质量条款 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-009 + name: 技术标准与质量条款 + risk: high + score: 4 + + stages: + - id: "1" + check: ai + prompt: | + 请检查技术合同中技术标准与质量条款的完整性和明确性。 + 技术规范:{{技术标准规范}} + 质量标准:{{质量标准}} + + 评查要点(依据民法典第845条、第615-616条): + 1. 是否引用了具体的技术规范文件(名称、编号、版本) + 2. 是否引用了适用的国家标准(GB)、行业标准或国际标准(如GB/T 22239-2019、OGC标准等) + 3. 标准引用是否完整(标准号、标准名称、版本年份) + 4. 质量检验方法是否明确 + 5. 不能仅有"符合相关标准""按行业惯例"等含糊表述 + 6. 注意区分:"评查基础标准"等业务数据标准是系统处理的数据内容,不属于系统技术标准 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 技术标准引用明确,质量条款清晰 + fail: 技术标准与质量条款不够明确 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-010 · 合同金额大小写一致 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-010 + name: 合同金额大小写一致 + risk: high + score: 2 + + stages: + - id: "1" + check: amount_match + number: 合同金额 + chinese: 合同金额大写 + + logic: "1" + + messages: + pass: 合同金额大小写一致 + fail: 合同金额数字与大写不一致 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-011 · 付款条款完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-011 + name: 付款条款完整 + risk: high + score: 3 + + stages: + - id: "1" + check: required + field: 付款方式 + - id: "2" + check: required + field: 付款条件 + + logic: "1 AND 2" + + messages: + pass: 付款条款完整 + fail: 付款方式或付款条件缺失 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-012 · 附加标的物价款标准 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-012 + name: 附加标的物价款标准 + risk: low + score: 1 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同是否涉及附加、额外标的物,如涉及是否明确了价款标准。 + 合同标的描述:{{合同标的描述}} + 附加标的物价款标准:{{附加标的物价款标准}} + + 评查要点(依据民法典第510条、第511条): + 1. 如合同可能涉及额外工作量、附加服务,是否约定了价款标准 + 2. 如合同标的已全部明确且无附加项,可直接PASS + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 附加标的物价款已明确或不涉及 + fail: 附加标的物价款标准缺失 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-013 · 银行账户信息完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-013 + name: 银行账户信息完整 + risk: medium + score: 2 + applies_in: + - executed + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同各方(甲方和乙方)的银行账户信息是否完整。 + 甲方开户银行:{{甲方开户银行}} + 甲方银行账号:{{甲方银行账号}} + 乙方开户银行:{{乙方开户银行}} + 乙方银行账号:{{乙方银行账号}} + + 判断规则: + 第一步:判断该方是付款方还是收款方。甲方一般为付款方(委托方),不需要提供收款账号,直接PASS。 + 第二步:若该方是收款方(乙方/开发方/服务提供方),检查: + 1. 开户银行不能为空 + 2. 银行账号不能为空 + 3. 银行账号应为数字,长度通常为16-20位 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 银行账户信息完整 + fail: 收款方银行账户信息不完整 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-014 · 税务信息完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-014 + name: 税务信息完整 + risk: medium + score: 1 + + stages: + - id: "1" + check: required + field: 不含税金额 + - id: "2" + check: required + field: 税率 + - id: "3" + check: required + field: 税额 + + logic: "1 AND 2 AND 3" + + messages: + pass: 税务信息(不含税金额、税率、税额)完整 + fail: 缺少不含税金额、税率或税额,可能存在编制疏漏 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-015 · 合同期限具体准确 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-015 + name: 合同期限具体准确 + risk: high + score: 4 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同期限是否具体准确。 + 起始日期:{{合同起始日期}} + 终止日期:{{合同终止日期}} + 合同期限描述:{{合同期限描述}} + 签约日期:{{签约日期}} + + 评查要点(依据民法典第470条、第511条): + 1. **起始日期判断优先级**: + - 优先级1:如果"合同起始日期"有具体日期,则以该日期为准 + - 优先级2:如果"合同起始日期"为空,但有明确的"签约日期",通常签约日期即为合同生效起始日期,应视为明确 + - 优先级3:如果"合同期限描述"中说明"自签约之日起""自本合同签订之日起""自双方签字盖章之日起",则签约日期即为起始日期 + - 特殊情况:如果起始日期依赖于其他条件(如"验收合格之日起"),需说明该条件是否合理 + 2. **合同期限完整性**:检查是否有明确的终止日期或合同期限(如1年、3年等) + 3. **日期格式**:起始/终止日期应为具体日期(年月日齐全),或可明确推算 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明(需说明起始日期如何确定)"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 合同期限明确 + fail: 合同期限不明确 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-016 · 合同地点具体准确 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-016 + name: 合同地点具体准确 + risk: medium + score: 2 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同中履行地点是否明确。 + 履行地点:{{履行地点}} + 签约地点:{{签约地点}} + + 评查要点(依据民法典第470条、第511条): + 1. 如合同涉及实施地点约定,地址是否具体 + 2. 技术合同的服务实施地点是重要履约要素,建议明确,如提及"甲方指定地点",可PASS + 3. 如合同无须约定具体地址,可PASS + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 合同地点明确 + fail: 合同地点不够具体 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-017 · 实施计划与里程碑完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-017 + name: 实施计划与里程碑完整 + risk: high + score: 4 + + stages: + - id: "1" + check: ai + prompt: | + 请检查技术合同中实施计划与里程碑的完整性。 + 实施计划:{{实施计划}} + 交付物:{{交付物}} + + 评查要点(依据民法典第845条、第853条): + 1. 是否明确划分了实施阶段(需求分析、方案设计、开发实施、测试验收等) + 2. 各阶段是否有明确的时间节点或里程碑 + 3. 各阶段是否明确了应交付的成果物 + 4. 总工期是否合理 + 5. 不能仅有"合同生效后XX个工作日内"的笼统描述 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 实施计划与里程碑约定完整 + fail: 实施计划与里程碑约定不完整 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-018 · 技术验收标准完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-018 + name: 技术验收标准完整 + risk: high + score: 4 + + stages: + - id: "1" + check: ai + prompt: | + 请检查技术合同中验收标准条款的完整性。 + 验收标准:{{验收标准}} + 验收流程:{{验收流程}} + 不合格处理:{{不合格处理}} + + 评查要点(依据民法典第845条): + 1. 验收标准是否明确(功能验收、性能验收、安全验收等各项标准) + 2. 验收流程是否清晰(验收组织方、参与方、验收步骤、验收期限) + 3. 是否约定了验收不合格时的整改要求和处理方式 + 4. 验收标准应与技术目标和技术指标相对应 + 5. 是否约定了分阶段验收还是整体验收 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 技术验收标准约定完整 + fail: 技术验收标准约定不完整 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-019 · 知识产权归属明确 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-019 + name: 知识产权归属明确 + risk: high + score: 4 + + stages: + - id: "1" + check: ai + prompt: | + 请检查技术合同中知识产权归属条款的完整性。 + 知识产权条款:{{知识产权条款}} + + 评查要点(依据民法典第859-861条): + 1. 是否明确约定技术成果(专利、软件著作权、技术秘密等)的归属 + 2. 是否区分了委托方和开发方各自的权利 + 3. 是否约定了技术成果使用许可的范围和方式 + 4. 是否约定了后续改进技术成果的分享办法 + 5. 对于软件开发类合同,应特别关注源代码、数据的归属 + 6. 民法典规定委托开发的专利申请权默认属于研发方,如需归委托方应明确约定 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 知识产权归属约定明确 + fail: 知识产权归属约定不明确 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-020 · 技术风险分担 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-020 + name: 技术风险分担 + risk: medium + score: 2 + + stages: + - id: "1" + check: ai + prompt: | + 请检查技术合同中技术风险分担条款。 + 技术风险条款:{{技术风险条款}} + + 评查要点(依据民法典第858条): + 1. 是否约定了因技术困难导致研发失败或部分失败时的风险分担方式 + 2. 是否约定了研发过程中遇到技术困难时的通知义务和时限 + 3. 无约定时风险由当事人合理分担(民法典默认规则),建议明确约定 + + 如合同未涉及技术风险分担条款,返回FAIL并说明建议补充。 + 如合同明确约定了相关条款,返回PASS。 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 技术风险分担约定明确 + fail: 技术风险分担约定缺失,建议补充 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-021 · 技术支持与资料移交 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-021 + name: 技术支持与资料移交 + risk: medium + score: 1 + + stages: + - id: "1" + check: ai + prompt: | + 请检查技术合同中技术支持与资料移交条款的完整性。 + 技术支持条款:{{技术支持条款}} + 资料移交清单:{{资料移交清单}} + + 评查要点(依据民法典第853条、第880条): + 1. 是否约定了技术支持的方式(现场、远程、电话等)和质保期 + 2. 是否约定了技术问题的响应时间和解决时限 + 3. 是否列明了应移交的技术资料清单(技术文档、操作手册、源代码等) + 4. 技术资料的移交时间和方式是否明确 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 技术支持与资料移交条款完整 + fail: 技术支持与资料移交条款不完整 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-022 · 违约责任形式明确 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-022 + name: 违约责任形式明确 + risk: high + score: 4 + + stages: + - id: "1" + check: required + field: 违约责任条款 + - id: "2" + check: ai + prompt: | + 请检查违约责任条款是否明确。 + 违约条款:{{违约责任条款}} + 合同金额:{{合同金额}} + + 评查要点(依据民法典第577条): + 1. 区分合同各方主体分别的责任,并分别评查合法、合理性 + 2. 违约情形是否有约定(具体情形或通用条款均可,"双方违反本合同任何条款"属于有效约定) + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1 AND 2" + + messages: + pass: 违约责任条款完整 + fail: 违约责任条款不完整 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-023 · 违约金条款完整性与合理性 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-023 + name: 违约金条款完整性与合理性 + risk: high + score: 6 + + stages: + - id: "1" + check: required + field: 违约责任条款 + - id: "2" + check: ai + prompt: | + 请审查违约金条款的完整性与合理性。 + 违约责任条款:{{违约责任条款}} + 合同金额:{{合同金额}} + + 评查方法: + 1. 【主体识别】:识别合同中涉及的所有责任主体(如甲方、乙方、多方合同中的各方) + 2. 【情形拆分】:对每个主体,列出其所有违约情形(逾期、质量不合格、单方解除、转包等) + 3. 【条款分析】:对每个违约情形,抽取以下信息: + - 违约金类型:日违约金/固定比例/赔偿损失/没收保证金/解除合同等 + - 计算方式:日违约金的每日标准、固定比例的百分比、赔偿的计算依据 + - 上限约束:是否有最高限额(如"不超过XX%"、"最高XX元") + - 累计条件:注意"直至XX为止""持续计算""按日累计"等可能无上限的表述 + 4. 【合理性评估】(依据民法典第585条): + - **上限优先原则**:如果违约金条款明确规定了金额上限(如"不超过XX%"、"最高XX元"),应以上限为准进行判定,不再计算年化率是否过高 + - 日违约金年化:仅对无上限条款时参考,每日1‰≈36.5%/年,每日5‰≈182.5%/年 + - 累计上限:有上限的合理,无上限的需评估长期累计风险 + - 固定比例:一般不超过合同总额的30% + - 责任对等:对比各方违约责任,是否存在显失公平 + 5. 该方权益是否有基本保护(如对方违约时自己能获得的补偿) + + 评查要点: + ✓ 完整性:各方的主要违约情形是否都有约定,不得缺失某方的责任条款 + ✓ 明确性:违约金标准是否可计算,不得使用"另行协商""按法律规定"等模糊表述 + ✓ 合理性:违约金是否过高或过低,日违约金需考虑累计风险 + ✓ 对等性:各方违约责任是否基本对等,不得一方极重一方极轻 + ✓ 上限保护:日违约金条款是否有合理上限,无上限的需特别注明风险 + + 请以JSON格式回答:{"passed": true/false, "reason": "按主体分项说明:哪些合理、哪些不合理及具体原因"} + + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1 AND 2" + + messages: + pass: 违约金条款完整且合理 + fail: 违约金条款不完整或不合理 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-024 · 争议解决方式明确 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-024 + name: 争议解决方式明确 + risk: high + score: 5 + + stages: + - id: "1" + check: required + field: 争议解决条款 + - id: "2" + check: ai + prompt: | + 请检查合同争议解决条款。 + 争议解决条款:{{争议解决条款}} + 甲方地址:{{甲方地址}} + 乙方地址:{{乙方地址}} + 履行地点:{{履行地点}} + + 请分两步审查争议解决条款: + 【第一步:形式审查】 + - 是否明确选择诉讼或仲裁其中一种? + - 是否出现"或仲裁/或诉讼"等并列表述? + → 若形式不通过,直接返回 {"passed": false, "reason": "形式违规:..."} + + 【第二步:实质审查(仅当形式通过时执行)】 + - 提取约定的管辖法院/仲裁机构所在地:{{管辖地点}} + - 提取关联地点:甲方住所地{{甲方地址}}、乙方住所地{{乙方地址}}、合同履行地{{履行地点}} + - 依据《民事诉讼法》第35条,判断{{管辖地点}}是否与上述任一地点存在实际联系 + → 若无实际联系,返回 {"passed": false, "reason": "管辖约定可能因违反民诉法第35条而无效,建议修改为..."} + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1 AND 2" + + messages: + pass: 争议解决方式明确 + fail: 争议解决方式约定不当 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-025 · 不可抗力条款存在 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-025 + name: 不可抗力条款存在 + risk: medium + score: 1 + + stages: + - id: "1" + check: required + field: 不可抗力条款 + + logic: "1" + + messages: + pass: 不可抗力条款存在 + fail: 缺少不可抗力条款 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-026 · 变更解除终止条款完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-026 + name: 变更解除终止条款完整 + risk: high + score: 4 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同变更、解除、终止条款是否完整并保障甲方(委托方)权益。 + 变更解除终止条款:{{变更解除终止条款}} + + 评查要点(依据民法典第543条、第562条、第563条): + 1. 合同变更条件和程序是否明确 + 2. 解除或终止条件是否明确,通知期限是否约定 + 3. 对方违约时甲方是否有足够的救济手段(解除合同、要求赔偿等) + 4. 终止条款是否对甲方不利(如对方可随意终止而甲方不能) + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 变更解除终止条款完整 + fail: 变更解除终止条款不完整或不利于己方 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-027 · 生效条件明确 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-027 + name: 生效条件明确 + risk: medium + score: 3 + + stages: + - id: "1" + check: required + field: 合同份数 + - id: "2" + check: required + field: 生效条件 + + logic: "1 AND 2" + + messages: + pass: 合同份数和生效条件明确 + fail: 缺少合同份数或生效条件 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-028 · 保密条款存在 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-028 + name: 保密条款存在 + risk: medium + score: 4 + + stages: + - id: "1" + check: required + field: 保密条款 + + logic: "1" + + messages: + pass: 保密条款存在 + fail: 缺少保密条款 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-029 · 附件条款完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-029 + name: 附件条款完整 + risk: low + score: 2 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同附件条款是否完整。 + 附件清单:{{附件清单}} + + 评查方法: + 1. 首先判断"附件清单"字段是否有值: + - 如果为空或null,说明合同未列明附件 + - 如果有值(如"1.廉洁合同;2.保密协议"),说明合同已列明附件 + 2. 检查附件清单的完整性: + - 是否有编号(如1.、2.、附件一、附件二) + - 是否有附件名称 + - 常见附件如廉洁合同、保密协议是否列入 + 3. 判断标准: + - 附件清单有值且包含编号和名称 → PASS(合同已列明附件) + - 附件清单为空但合同实际有附件 → FAIL(未列明) + - 合同明确无附件 → PASS + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 附件条款完整或无附件 + fail: 附件条款不完整 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-030 · 补充协议条款完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-030 + name: 补充协议条款完整 + risk: medium + score: 2 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同中是否涉及补充协议条款。 + 补充协议条款:{{补充协议条款}} + + 评查要点: + 1. 如合同包含补充协议或变更协议,应具有协议编号、原合同编号、生效日期 + 2. 如合同不涉及补充协议,直接PASS + 3. 补充协议应有与原合同的冲突解决条款 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 补充协议条款完整或无补充协议 + fail: 补充协议条款不完整 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-031 · 合同文本格式规范(暂时注释 - numbering check 未实现) + # ═════════════════════════════════════════════════════════════ + # - rule_id: JS-TECH-031 + # name: 合同文本格式规范 + # risk: medium + # score: 2 + # group: 通用条款 + # + # stages: + # - id: "1" + # check: numbering + # + # logic: "1" + # + # messages: + # pass: 合同文本格式规范 + # fail: 合同文本格式不规范 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-032 · 骑缝章检查 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-032 + name: 骑缝章检查 + risk: medium + score: 2 + applies_in: + - executed + + stages: + - id: "1" + check: visual + element: 骑缝章 + + logic: "1" + + messages: + pass: 已加盖骑缝章 + fail: 未检测到骑缝章 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-033 · 签署信息完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-033 + name: 签署信息完整 + risk: high + score: 2 + applies_in: + - executed + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同各签署方的签署信息是否完整。 + 甲方:{{甲方}},法定代表人:{{甲方法定代表人}} + 乙方:{{乙方}},法定代表人:{{乙方法定代表人}} + 签约日期:{{签约日期}} + + 评查标准(依据民法典第490条): + 1. 各方是否有签名或盖章(至少一项) + 2. 签署日期应有具体日期 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 签署信息完整 + fail: 签署信息不完整 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-034 · 签署权限审查 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-034 + name: 签署权限审查 + risk: high + score: 2 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同签署人的权限是否完整。 + 授权信息:{{甲方授权委托信息}} + 签约日期:{{签约日期}} + + 评查要点(依据民法典第61条、第170条): + 1. 如为法人本人签署(法定代表人),授权信息应包含法人姓名、职务 + 2. 如为非法人签署(代理人),授权信息必须包含: + - 签署人姓名 + - 签署人职位/职务 + - 权限来源(法定代表人授权书、董事会决议、股东会决议等) + - 授权范围(有权签署何种类型的合同、金额上限等) + + 判定标准: + - 法人本人签署:有姓名、职务即可通过 + - 非法人签署:必须包含职位、权限来源、授权范围,否则不通过 + - 草稿阶段授权信息为空时,判定为不通过(提醒补充) + + 请以JSON格式回答:{"passed": true/false, "reason": "签署人授权信息不完整,缺少职位/权限来源/授权范围"} + + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 合同金额在授权范围内或已报上级审查 + fail: 合同可能超出授权范围 diff --git a/rules/contract_lease/rules.yaml b/rules/contract_lease/rules.yaml index 89ea45b..47c8a92 100644 --- a/rules/contract_lease/rules.yaml +++ b/rules/contract_lease/rules.yaml @@ -1,1453 +1,1567 @@ +# ═══════════════════════════════════════════════════════════════ +# 不动产租赁合同 — 评查规则库 +# ═══════════════════════════════════════════════════════════════ +# 依据《中华人民共和国民法典》合同编·通则(第467、470、490条) +# 及租赁合同章(第703-734条) +# 适用于房屋、办公场所、店铺等不动产租赁合同的评查 +# 覆盖签署前审查(draft)和签署后审计(executed)两个阶段 + metadata: type_id: contract.lease name: 不动产租赁合同 - version: '2.0' - last_updated: '2026-04-14' + version: "2.0" + last_updated: "2026-04-14" + + classification_keywords: + - 租赁 + - 不动产 + - 房屋 + - 租房 + - 出租 + tags: - - 合同 - - 租赁 - - 不动产 - - 房屋 - references_laws: - - 《民法典》第四百六十七条 - - 《民法典》第四百七十条 - - 《民法典》第四百九十条 - - 《民法典》第七百零三条至第七百三十四条 - description: '依据《中华人民共和国民法典》合同编·通则(第467、470、490条)及租赁合同章(第703-734条)。 + - 合同 + - 租赁 + - 不动产 + - 房屋 + description: | + 依据《中华人民共和国民法典》合同编·通则(第467、470、490条)及租赁合同章(第703-734条)。 适用于房屋、办公场所、店铺等不动产租赁合同的评查。 + 覆盖签署前审查(draft)和签署后审计(executed)两个阶段 - 覆盖签署前审查(draft)和签署后审计(executed)两个阶段。 + references_laws: + - 《民法典》第四百六十七条 + - 《民法典》第四百七十条 + - 《民法典》第四百九十条 + - 《民法典》第七百零三条至第七百三十四条 - 基于旧系统 00_通用规则.json + 06_租赁合同.json 合并、去重、样本校准而成(39→33 条)。 +# ───────────────────────────────────────────────────────────────── +# 字段抽取声明 +# required_from: 该字段从哪个阶段开始必需 +# draft → 起草阶段就必需(草稿没有也会被标记) +# executed → 仅已执行阶段必需(草稿可以缺失) +# 未声明 → 默认 executed +# ───────────────────────────────────────────────────────────────── - ' extract: -- group: 基础信息 - note: 合同基础元信息、签约背景和签署要素 - fields: - - name: 合同名称 - type: verbatim - required_from: draft - desc: 合同标题/项目名称 - deep_retry: false - - name: 签约背景 - type: string - required_from: draft - desc: 合同签约背景/缘由(如招标方式、协商过程等开篇段落) - deep_retry: false - - name: 引用法律法规 - type: string - required_from: draft - desc: 合同引用的法律、法规、规章的列表 - deep_retry: false - - name: 生效条件 - type: string - required_from: draft - desc: 合同生效条件(签字盖章、经批准等) - deep_retry: false - - name: 签约日期 - type: date - required_from: executed - desc: 合同签订日期 - deep_retry: false - - name: 签约地点 - type: verbatim - required_from: executed - desc: 合同签订地点 - deep_retry: false - - name: 合同编号 - type: verbatim - required_from: executed - desc: 合同唯一编号 - deep_retry: false - - name: 合同份数 - type: integer - required_from: executed - desc: 合同正本份数 - deep_retry: false -- group: 主体信息 - note: 出租方、承租方及联系方式 - fields: - - name: 出租方 - type: verbatim - required_from: draft - desc: 出租方(甲方)全称,个人为姓名,单位为公司名 - deep_retry: false - - name: 出租方证件号 - type: verbatim - required_from: draft - desc: 出租方身份证号(个人)或统一社会信用代码(单位) - deep_retry: false - - name: 出租方地址 - type: verbatim - required_from: draft - desc: 出租方住址或注册地址 - deep_retry: false - - name: 出租方法定代表人 - type: verbatim - required_from: draft - desc: 出租方法定代表人或负责人姓名(出租方为单位时) - deep_retry: false - - name: 出租方联系电话 - type: verbatim - required_from: draft - desc: 出租方联系电话 - deep_retry: false - - name: 承租方 - type: verbatim - required_from: draft - desc: 承租方(乙方)全称 - deep_retry: false - - name: 承租方统一社会信用代码 - type: verbatim - required_from: executed - desc: 承租方18位统一社会信用代码(单位承租人)。签署阶段必填,draft 阶段可为空。 - deep_retry: false - - name: 承租方地址 - type: verbatim - required_from: draft - desc: 承租方住址或注册地址 - deep_retry: false - - name: 承租方法定代表人 - type: verbatim - required_from: draft - desc: 承租方法定代表人或负责人姓名 - deep_retry: false - - name: 承租方联系电话 - type: verbatim - required_from: draft - desc: 承租方联系电话 - deep_retry: false -- group: 标的物与租期 - note: 租赁标的、交付、权属和租期安排 - fields: - - name: 租赁物描述 - type: string - required_from: draft - desc: 租赁物的名称、坐落地址、建筑面积的完整描述 - deep_retry: false - - name: 租赁用途 - type: string - required_from: draft - desc: 租赁物的约定使用用途(居住、办公、商用等) - deep_retry: false - - name: 交付方式 - type: string - required_from: draft - desc: 房屋移交的方式和程序:交付时间、交付状态(空房/带装修/含家具)、钥匙和设施移交、验收程序。不含租金支付相关内容。 - deep_retry: false - - name: 履行地点 - type: verbatim - required_from: draft - desc: 租赁房屋坐落地点(履行地点) - deep_retry: false - - name: 出租方权属声明 - type: string - required_from: draft - desc: 出租方对房屋所有权/处分权的明确承诺条款原文,以及产权纠纷的责任承担约定。关键词包括'承诺合法取得所有权''有权对房屋进行处分''产权证明''抵押/查封情况'等。若合同未约定,填空字符串。 - deep_retry: false - - name: 租赁起始日期 - type: date - required_from: draft - desc: 租赁期限起始日期 - deep_retry: false - - name: 租赁结束日期 - type: date - required_from: draft - desc: 租赁期限结束日期 - deep_retry: false - - name: 退租返还条款 - type: string - required_from: draft - desc: 租赁期满返还条件、返还状态、优先续租权的约定 - deep_retry: false -- group: 租金与支付 - note: 租金金额、支付安排、税务与押金特征 - fields: - - name: 租金金额 - type: money - required_from: draft - desc: 租金数字金额(月租、年租或租期总额) - deep_retry: true - - name: 租金金额大写 - type: verbatim - required_from: draft - desc: 租金中文大写金额 - deep_retry: false - - name: 租金计算周期 - type: string - required_from: draft - desc: 租金计算周期(月付、年付、一次性等) - deep_retry: false - - name: 租金支付方式 - type: string - required_from: draft - desc: 付款周期、方式、时间节点、逾期处理的完整描述 - deep_retry: false - - name: 收款方开户银行 - type: verbatim - required_from: executed - desc: 收款方(通常为出租方)银行开户行全称 - deep_retry: false - - name: 收款方银行账号 - type: verbatim - required_from: executed - desc: 收款方银行账号 - deep_retry: false - - name: 收款方账户名称 - type: verbatim - required_from: executed - desc: 收款方账户名称(与出租方主体一致) - deep_retry: false - - name: 租金是否含税 - type: - - 是 - - 否 - required_from: draft - allowed: - - 是 - - 否 - desc: 租金金额是否已包含税费。填"是":合同中明确"含税"或"租金已包含税费";填"否":另行约定税费分担或未说明。 - deep_retry: false - - name: 约定押金 - type: - - 是 - - 否 - required_from: draft - allowed: - - 是 - - 否 - desc: '合同中是否约定了押金、保证金或类似担保金额。 填"是"的条件:明确约定"押金""保证金""定金"及其金额。 填"否"的条件:未约定任何押金/保证金(一次性付清、无需担保等)。 + # ── 合同基本信息 ── + - {name: 合同名称, type: verbatim, required_from: draft, description: 合同标题/项目名称} + - {name: 签约背景, type: string, required_from: draft, description: 合同签约背景/缘由(如招标方式、协商过程等开篇段落)} + - {name: 引用法律法规, type: string, required_from: draft, description: 合同引用的法律、法规、规章的列表} + - {name: 合同编号, type: verbatim, required_from: executed, description: 合同唯一编号} + - {name: 签约日期, type: date, required_from: executed, description: 合同签订日期} + - {name: 签约地点, type: verbatim, required_from: executed, description: 合同签订地点} + - {name: 合同份数, type: verbatim, required_from: executed, deep_retry: true, description: 合同总份数。从原文中找到"本合同一式X份"等表述,只抽取"一式X份"这几个字(如"一式肆份"、"一式四份")。不要包含后续的分配方式} + - {name: 生效条件, type: string, required_from: executed, description: 合同生效条件(签字盖章、经批准等)} + - {name: 附件列表, type: string, description: 合同附件的序号、名称、类型的列表} + - {name: 补充协议条款, type: string, description: 未尽事宜补充、补充协议效力等约定。注意:不包含合同份数、生效条件、争议解决等已有专门字段的内容。如合同中没有单独的补充协议条款,填空字符串} - ' - deep_retry: false -- group: 使用与费用 - note: 使用方式、转租和维修责任等履约条款 - fields: - - name: 维修责任条款 - type: string - required_from: draft - desc: 出租方和承租方的维修责任分工、费用负担 - deep_retry: false - - name: 转租条款 - type: string - required_from: draft - desc: 是否允许转租、转租条件的完整约定 - deep_retry: false -- group: 违约与争议 - note: 违约责任、解除终止、不可抗力和争议解决 - fields: - - name: 违约责任条款 - type: string - required_from: draft - desc: 违约责任的完整条款内容(双方违约情形和责任) - deep_retry: false - - name: 违约金金额 - type: money - required_from: draft - desc: 违约金具体金额或计算基数 - deep_retry: false - - name: 违约金计算方式 - type: string - required_from: draft - desc: 违约金计算标准(固定金额/比例/按日计算等) - deep_retry: false - - name: 争议解决条款 - type: string - required_from: draft - desc: 争议解决方式的完整条款(协商/诉讼/仲裁) - deep_retry: false - - name: 管辖机构 - type: verbatim - required_from: draft - desc: 指定的法院或仲裁机构名称 - deep_retry: false - - name: 不可抗力条款 - type: string - required_from: draft - desc: 不可抗力定义、通知义务、免责约定的完整条款 - deep_retry: false - - name: 变更解除终止条款 - type: string - required_from: draft - desc: 合同变更、解除、终止的条件和程序 - deep_retry: false -- group: 附件与特征分类 - note: 附件补充条款和条件激活字段 - fields: - - name: 附件列表 - type: string - required_from: draft - desc: 合同附件的序号、名称、类型的列表 - deep_retry: false - - name: 补充协议条款 - type: string - required_from: draft - desc: 未尽事宜补充、补充协议效力等约定 - deep_retry: false - - name: 涉及保密信息 - type: - - 是 - - 否 - required_from: draft - allowed: - - 是 - - 否 - desc: '合同中是否存在保密条款或涉及商业秘密、技术秘密。 填"是"的条件:出现"保密""商业秘密""技术秘密""不得泄露"等关键词且有实质条款。 填"否"的条件:普通房屋租赁,无任何保密相关条款。 + # ── 当事人 ── + - {name: 出租方, type: verbatim, required_from: draft, description: 出租方(甲方)全称,个人为姓名,单位为公司名} + - {name: 承租方, type: verbatim, required_from: draft, description: 承租方(乙方)全称} + - {name: 出租方负责人, type: verbatim, required_from: draft, description: 出租方负责人姓名(单位为法定代表人,个人为本人;如未列出可为空)} + - {name: 承租方负责人, type: verbatim, required_from: draft, description: 承租方负责人姓名(单位为法定代表人,个人为本人)} + - {name: 出租方地址, type: verbatim, required_from: draft, description: 出租方住址或注册地址} + - {name: 承租方地址, type: verbatim, required_from: draft, description: 承租方住址或注册地址} + - {name: 出租方联系电话, type: verbatim, required_from: draft, description: 出租方联系电话} + - {name: 承租方联系电话, type: verbatim, required_from: draft, description: 承租方联系电话} + - {name: 出租方证件号, type: verbatim, required_from: draft, description: 出租方身份证号(个人)或统一社会信用代码(单位)} + - {name: 承租方统一社会信用代码, type: verbatim, required_from: executed, description: 承租方18位统一社会信用代码(单位承租人)。签署阶段必填,draft 阶段可为空} + + # ── 租赁标的 ── + - {name: 租赁物描述, type: string, required_from: draft, description: 租赁物的名称、坐落地址、建筑面积的完整描述} + - {name: 租赁用途, type: string, required_from: draft, description: 租赁物的约定使用用途(居住、办公、商用等)} + - {name: 履行地点, type: verbatim, description: 租赁房屋坐落地点(履行地点)} + - {name: 出租方权属声明, type: string, description: 出租方对房屋所有权/处分权的明确承诺条款原文,以及产权纠纷的责任承担约定。关键词包括'承诺合法取得所有权''有权对房屋进行处分''产权证明''抵押/查封情况'等。若合同未约定,填空字符串} + + # ── 租金与支付 ── + - {name: 月租金金额, type: money, required_from: draft, description: 月租金数字金额(如有)} + - {name: 月租金大写, type: verbatim, required_from: draft, description: 月租金中文大写金额(保留原文,如'贰仟捌佰元整')} + - {name: 年租金金额, type: money, required_from: draft, description: 年租金数字金额(如有)} + - {name: 年租金大写, type: verbatim, required_from: draft, description: 年租金中文大写金额(保留原文)} + - {name: 租金结算方式, type: string, description: 实际采用的租金结算方式(月付/季付/年付/一次性等),根据付款条款判断} + - {name: 租金支付方式, type: string, required_from: draft, description: 付款周期、方式、时间节点、逾期处理的完整描述} + - {name: 收款方开户银行, type: verbatim, required_from: draft, description: 收款方(通常为出租方)银行开户行全称} + - {name: 收款方银行账号, type: verbatim, required_from: draft, description: 收款方银行账号} + - {name: 收款方账户名称, type: verbatim, required_from: draft, description: 收款方账户名称(与出租方主体一致)} + - {name: 租金是否含税, type: [是, 否], description: 租金金额是否已包含税费。填"是":合同中明确"含税"或"租金已包含税费";填"否":另行约定税费分担或未说明} + - {name: 约定押金, type: [是, 否], description: 合同中是否约定了押金、保证金或类似担保金额。填"是"的条件:明确约定"押金""保证金""定金"及其金额。填"否"的条件:未约定任何押金/保证金(一次性付清、无需担保等)} + + # ── 租赁期限 ── + - {name: 租赁起始日期, type: date, description: 租赁期限起始日期} + - {name: 租赁结束日期, type: date, description: 租赁期限结束日期} + + # ── 履行方式 ── + - {name: 交付方式, type: string, description: 房屋移交的方式和程序:交付时间、交付状态(空房/带装修/含家具)、钥匙和设施移交、验收程序。不含租金支付相关内容} + + # ── 条款 ── + - {name: 维修责任条款, type: string, description: 出租方和承租方的维修责任分工、费用负担} + - {name: 转租条款, type: string, description: 是否允许转租、转租条件的完整约定} + - {name: 退租返还条款, type: string, description: 租赁期满返还条件、返还状态、优先续租权的约定} + - {name: 违约责任条款, type: string, description: 违约责任的完整条款内容(双方违约情形和责任)} + - {name: 违约金金额, type: money, description: 违约金具体金额或计算基数} + - {name: 违约金计算方式, type: string, description: 违约金计算标准(固定金额/比例/按日计算等)} + - {name: 争议解决条款, type: string, description: 争议解决方式的完整条款(协商/诉讼/仲裁)} + - {name: 管辖机构, type: verbatim, description: 指定的法院或仲裁机构名称} + - {name: 不可抗力条款, type: string, description: 不可抗力定义、通知义务、免责约定的完整条款} + - {name: 变更解除终止条款, type: string, description: 合同变更、解除、终止的条件和程序} + + # ── 特殊约定 ── + - {name: 涉及保密信息, type: [是, 否], description: 合同中是否存在保密条款或涉及商业秘密、技术秘密。填"是"的条件:出现"保密""商业秘密""技术秘密""不得泄露"等关键词且有实质条款。填"否"的条件:普通房屋租赁,无任何保密相关条款} + + # ── 居间方(可选)── + - {name: 居间方名称, type: verbatim, description: 居间方/中介方公司全称(如有)} + - {name: 居间方服务费, type: string, description: 居间服务费金额及支付方式(如有),如'甲方1250元、乙方1250元'} + - {name: 居间方负责人, type: verbatim, description: 居间方法定代表人或负责人姓名(如有)} + - {name: 约定居间方, type: [是, 否], description: 合同中是否有居间方/中介方参与。填'是'的条件:出现'中介方''居间方''丙方''中介服务费'等关键词且有具体机构名称。填'否'的条件:甲乙双方直接签订,无任何中介参与} + +# ───────────────────────────────────────────────────────────────── +# 视觉元素声明 +# ───────────────────────────────────────────────────────────────── - ' - deep_retry: false visual_elements: seals: - - id: 出租方签章 - name: 出租方签字或公章 - required: true - required_from: executed - - id: 承租方签章 - name: 承租方盖章 - required: true - required_from: executed + - id: 出租方签章 + name: 出租方签字或公章 + required: true + required_from: executed + - id: 承租方签章 + name: 承租方盖章 + required: true + required_from: executed cross_page_seals: - - id: 骑缝章 - name: 合同骑缝章 - required: true - required_from: executed + - id: 骑缝章 + name: 合同骑缝章 + required: true + required_from: executed + +# ───────────────────────────────────────────────────────────────── +# 规则列表 +# ───────────────────────────────────────────────────────────────── + rules: -- group: 基础信息 - rules: - - rule_id: MM-LEASE-018 - name: 生效条件明确性 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-001 · 当事人信息齐全 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-001 + name: 当事人信息齐全 + risk: high + score: 4 + + stages: + - id: "1" + check: required + field: 出租方 + - id: "2" + check: required + field: 承租方 + + logic: "1 AND 2" + + messages: + pass: 出租方和承租方信息齐全 + fail: 缺少出租方或承租方信息 + + references_laws: + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-002 · 当事人信息准确完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-002 + name: 当事人信息准确完整 + risk: high + score: 3 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同当事人(出租方和承租方)的信息是否准确完整。 + + 出租方:{{出租方}} + 出租方负责人:{{出租方负责人}} + 出租方地址:{{出租方地址}} + 出租方联系电话:{{出租方联系电话}} + 出租方证件号:{{出租方证件号}} + + 承租方:{{承租方}} + 承租方负责人:{{承租方负责人}} + 承租方地址:{{承租方地址}} + 承租方联系电话:{{承租方联系电话}} + 承租方统一社会信用代码:{{承租方统一社会信用代码}} + + 评查要点: + 1. 双方主体名称是否清晰可辨(个人为姓名,单位为公司名) + 2. 出租方为个人时是否有身份证号;出租方为单位时是否有统一社会信用代码 + 3. 承租方为单位时是否有法定代表人 + 4. 双方联系地址和电话是否齐全 + + 特别说明:承租方统一社会信用代码属于签署阶段(executed)字段, + 在草稿阶段(draft)合同模板中为空是正常情况,不作为判 fail 依据。 + 只有在已签署的合同中(合同编号、签约日期已填写)仍缺失 USCC,才应判 fail。 + + 法规依据:民法典§470 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 当事人信息准确完整 + fail: 当事人信息有缺失或不准确 + + references_laws: + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-003 · 租赁标的明确 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-003 + name: 租赁标的明确 + risk: high + score: 4 + + stages: + - id: "1" + check: ai + prompt: | + 请检查租赁合同中租赁标的信息是否明确。 + + 租赁物描述:{{租赁物描述}} + 租赁用途:{{租赁用途}} + + 评查要点: + 1. 是否明确了租赁物的名称(房屋、办公场所、店铺等) + 2. 是否明确了租赁物的具体位置/地址 + 3. 是否明确了租赁物的面积/规格 + 4. 是否明确了租赁用途(居住、办公、商用等) + 5. 租赁用途应当合法且与租赁物性质相符 + + 法规依据:民法典§703、§704 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 租赁标的信息明确 + fail: 租赁标的信息不明确或不完整 + + references_laws: + - 《民法典》第七百零三条 + - 《民法典》第七百零四条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-004 · 租赁期限合规 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-004 + name: 租赁期限合规 + risk: high + score: 4 + + stages: + - id: "1" + check: required + field: 租赁起始日期 + - id: "2" + check: required + field: 租赁结束日期 + - id: "3" + check: ai + prompt: | + 请检查租赁合同的租赁期限是否合规。 + + 起始日期:{{租赁起始日期}} + 结束日期:{{租赁结束日期}} + 退租返还条款(含续租约定):{{退租返还条款}} + + 评查要点: + 1. 起止日期是否明确 + 2. 租赁期限是否超过二十年(超过二十年的部分无效) + 3. 租赁期限六个月以上的应当采用书面形式(本合同为书面) + 4. 如有续租约定,续租后累计期限是否可能超过二十年 + + 法规依据:民法典§705、§707 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1 AND 2 AND 3" + + messages: + pass: 租赁期限明确且合规 + fail: 租赁期限缺失或超过法定上限 + + references_laws: + - 《民法典》第七百零五条 + - 《民法典》第七百零七条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-005 · 年租金完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-005 + name: 年租金完整 + risk: high + score: 3 + + stages: + - id: "1" + check: required + field: 年租金金额 + - id: "2" + check: required + field: 年租金大写 + - id: "3" + check: amount_match + number: 年租金金额 + chinese: 年租金大写 + + logic: "1 AND 2 AND 3" + + messages: + pass: 年租金完整且大小写一致 + fail: 年租金缺失或大小写不一致(如有年租金金额,必须有对应的大写) + + references_laws: + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-005a · 月租金完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-005a + name: 月租金完整 + risk: medium + score: 1 + + stages: + - id: "1" + check: required + field: 月租金金额 + - id: "2" + check: required + field: 月租金大写 + - id: "3" + check: amount_match + number: 月租金金额 + chinese: 月租金大写 + + logic: "1 AND 2 AND 3" + + messages: + pass: 月租金完整且大小写一致 + fail: 月租金缺失或大小写不一致(如有月租金金额,必须有对应的大写) + + references_laws: + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-006 · 租金及支付方式完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-006 + name: 租金及支付方式完整 + risk: high + score: 4 + + stages: + - id: "1" + check: required + field: 租金支付方式 + - id: "2" + check: ai + prompt: | + 请检查租金支付方式是否完整。 + + 租金结算方式:{{租金结算方式}} + 月租金金额:{{月租金金额}} + 年租金金额:{{年租金金额}} + 租金支付方式:{{租金支付方式}} + 收款方开户银行:{{收款方开户银行}} + 收款方银行账号:{{收款方银行账号}} + + 评查要点: + 1. 支付方式是否明确(银行转账、现金等) + 2. 支付周期是否明确(月付、季付、年付、一次性等) + 3. 是否约定了逾期支付的后果(滞纳金、解除权等) + 4. 付款账户信息是否完整(开户行、账号、户名) + + 法规依据:民法典§721、§722 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1 AND 2" + + messages: + pass: 租金支付方式约定完整 + fail: 租金支付方式约定不完整 + + references_laws: + - 《民法典》第七百二十一条 + - 《民法典》第七百二十二条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-007 · 合同地点具体准确 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-007 + name: 合同地点具体准确 risk: medium score: 4 + stages: - - id: '1' - check: required - field: 生效条件 - - id: '2' - check: required - field: 合同份数 - logic: 1 AND 2 + - id: "1" + check: ai + prompt: | + 请检查合同地点信息是否具体准确。 + + 履行地点(租赁房屋位置):{{履行地点}} + 签约地点:{{签约地点}} + 出租方地址:{{出租方地址}} + 承租方地址:{{承租方地址}} + + 评查要点: + 1. 租赁房屋的坐落地点是否具体(到具体门牌号/楼层) + 2. 签约地点是否明确 + 3. 双方地址是否完整可供送达 + + 法规依据:民法典§470 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + messages: - pass: 生效条件和合同份数明确 - fail: 生效条件或合同份数缺失 + pass: 合同地点信息具体准确 + fail: 合同地点信息不具体或缺失 + references_laws: - - 《民法典》第五百零二条 - type: deterministic - - rule_id: MM-LEASE-021 - name: 签约背景与法律依据 + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-008 · 履行方式具体准确 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-008 + name: 履行方式具体准确 + risk: medium + score: 3 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同履行方式是否具体准确。 + + 交付方式:{{交付方式}} + 租赁用途:{{租赁用途}} + + 评查要点: + 1. 房屋交付时间和条件是否明确 + 2. 是否约定了钥匙、设施设备的移交 + 3. 交付状态(空房/带装修/带家具等)是否明确 + 4. 验收或确认程序是否约定 + + 法规依据:民法典§708、§709 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 履行方式具体明确 + fail: 履行方式不具体或缺失 + + references_laws: + - 《民法典》第七百零八条 + - 《民法典》第七百零九条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-009 · 维修责任约定 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-009 + name: 维修责任约定 + risk: medium + score: 3 + + stages: + - id: "1" + check: required + field: 维修责任条款 + - id: "2" + check: ai + prompt: | + 请检查维修责任条款是否明确。 + + 维修责任条款:{{维修责任条款}} + + 评查要点: + 1. 是否明确了出租方的维修义务范围(主体结构、设施设备等) + 2. 是否明确了承租方的维修义务范围(日常维护、合理使用等) + 3. 维修费用的承担方是否明确 + 4. 是否约定维修期间的租金处理(如长期维修时租金减免) + 5. 因承租方过错导致损坏的维修责任是否明确 + + 法规依据:民法典§712、§713 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1 AND 2" + + messages: + pass: 维修责任约定明确 + fail: 维修责任缺失或不明确 + + references_laws: + - 《民法典》第七百一十二条 + - 《民法典》第七百一十三条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-010 · 转租条款 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-010 + name: 转租条款 + risk: medium + score: 1 + + stages: + - id: "1" + check: required + field: 转租条款 + - id: "2" + check: ai + prompt: | + 请检查转租条款是否明确。 + + 转租条款:{{转租条款}} + + 评查要点: + 1. 是否明确约定了是否允许转租 + 2. 如允许转租,是否约定了转租的条件和程序(如需经出租方书面同意) + 3. 如禁止转租,是否明确了违反禁止转租的后果 + 4. 是否约定了转租后的责任承担 + + 法规依据:民法典§716、§717、§718 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1 AND 2" + + messages: + pass: 转租条款约定明确 + fail: 转租条款缺失或不明确 + + references_laws: + - 《民法典》第七百一十六条 + - 《民法典》第七百一十七条 + - 《民法典》第七百一十八条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-011 · 租赁物返还与退租 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-011 + name: 租赁物返还与退租 + risk: medium + score: 3 + + stages: + - id: "1" + check: required + field: 退租返还条款 + - id: "2" + check: ai + prompt: | + 请检查退租和返还条款是否完整。 + + 退租返还条款:{{退租返还条款}} + + 评查要点: + 1. 是否约定了租赁物返还的条件和时间 + 2. 是否约定了返还时租赁物应处的状态(恢复原状、正常损耗等) + 3. 是否约定了承租方的优先承租权(房屋租赁中法定享有) + 4. 是否约定了提前退租的条件和违约责任 + 5. 是否约定了租赁物返还时的交接验收程序 + + 法规依据:民法典§733、§734 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1 AND 2" + + messages: + pass: 退租及返还条款完整 + fail: 退租及返还条款不完整 + + references_laws: + - 《民法典》第七百三十三条 + - 《民法典》第七百三十四条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-012 · 违约责任形式明确 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-012 + name: 违约责任形式明确 risk: high - score: 9 + score: 4 + stages: - - id: '1' - check: ai - prompt: '请检查合同的签约背景和法律依据是否准确。 + - id: "1" + check: required + field: 违约责任条款 + - id: "2" + check: ai + prompt: | + 请检查违约责任条款是否形式明确。 + 违约责任条款:{{违约责任条款}} - 签约背景:{{签约背景}} + 评查要点: + 1. 是否明确了违约方和违约情形 + 2. 责任形式是否具体(支付违约金、赔偿损失、继续履行等) + 3. 是否覆盖双方(出租方违约和承租方违约均有约定) + 4. 是否有兜底条款(如未尽事宜如何处理) - 引用法律法规:{{引用法律法规}} + 法规依据:民法典§577 - 生效条件:{{生效条件}} + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" - 变更解除终止条款:{{变更解除终止条款}} + logic: "1 AND 2" - - 评查要点: - - 1. 签约背景或缘由是否存在(如招标方式、协商过程、签约原因等) - - 2. 合同依据的法律、法规、规章必须准确、有效(不能引用已废止的法律) - - 3. 合同条款不违反法律禁止性规定,并具有实用性 - - 4. 合同按法律法规规定的方式生效、变更、解除并办理相应手续 - - - 法规依据:民法典§153、§502 - - ' messages: - pass: 签约背景存在且法律依据准确有效 - fail: 签约背景缺失或法律依据存在问题 + pass: 违约责任形式明确 + fail: 违约责任形式不明确或缺失 + references_laws: - - 《民法典》第一百五十三条 - - 《民法典》第五百零二条 - type: ai_rule - - rule_id: MM-LEASE-022 - name: 合同名称合法有效 + - 《民法典》第五百七十七条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-013 · 违约金条款完整合理 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-013 + name: 违约金条款完整合理 + risk: high + score: 6 + + stages: + - id: "1" + check: required + field: 违约金金额 + - id: "2" + check: ai + prompt: | + 请检查违约金条款是否完整合理。 + + 违约金金额:{{违约金金额}} + 违约金计算方式:{{违约金计算方式}} + 违约责任条款:{{违约责任条款}} + 月租金金额:{{月租金金额}} + 年租金金额:{{年租金金额}} + + 评查要点: + 1. 违约金金额或计算方式是否明确 + 2. 违约金标准是否合理(约定过高可依法调整,一般不超过造成损失的 30%) + 3. 是否约定了逾期支付租金的违约金 + 4. 是否覆盖双方违约情形 + + 法规依据:民法典§585 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1 AND 2" + + messages: + pass: 违约金条款完整合理 + fail: 违约金条款不完整或标准不合理 + + references_laws: + - 《民法典》第五百八十五条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-014 · 争议解决方式明确 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-014 + name: 争议解决方式明确 + risk: high + score: 3 + + stages: + - id: "1" + check: required + field: 争议解决条款 + - id: "2" + check: ai + prompt: | + 请检查争议解决方式是否明确。 + + 争议解决条款:{{争议解决条款}} + 管辖机构:{{管辖机构}} + + 评查要点: + 1. 是否明确了争议解决方式(协商/诉讼/仲裁,只能择一作为最终方式) + 2. 不能同时约定仲裁和诉讼(互斥) + 3. 如约定诉讼,是否指定了具体的管辖法院 + 4. 如约定仲裁,是否指定了具体的仲裁机构 + + 法规依据:民法典§470 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1 AND 2" + + messages: + pass: 争议解决方式明确 + fail: 争议解决方式不明确或约定冲突 + + references_laws: + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-016 · 不可抗力条款完整性 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-016 + name: 不可抗力条款完整性 risk: medium score: 2 + stages: - - id: '1' - check: ai - prompt: '请检查合同名称是否合法有效。 + - id: "1" + check: required + field: 不可抗力条款 + - id: "2" + check: ai + prompt: | + 请检查不可抗力条款是否完整(三要素)。 + 不可抗力条款:{{不可抗力条款}} - 合同名称:{{合同名称}} + 评查要点(三要素): + 1. 是否明确了不可抗力的定义/类型范围 + 2. 是否约定了通知义务和通知时限 + 3. 是否约定了免责后果和合同处理方式(如延期履行、解除合同等) - 租赁物描述:{{租赁物描述}} + 法规依据:民法典§180、§590 - 租赁用途:{{租赁用途}} + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + logic: "1 AND 2" - 评查要点: + messages: + pass: 不可抗力条款完整 + fail: 不可抗力条款缺失或要素不全 - 1. 合同名称必须与合同内容一致(名为"租赁合同"且实际为租赁关系) + references_laws: + - 《民法典》第一百八十条 + - 《民法典》第五百九十条 - 2. 符合民法典有名合同特征的应当采用标准合同名称(如"房屋租赁合同") + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-017 · 变更解除终止条款完整性 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-017 + name: 变更解除终止条款完整性 + risk: high + score: 4 - 3. 合同名称不应使用会引起误解的名称 + stages: + - id: "1" + check: ai + prompt: | + 请检查变更、解除、终止条款是否完整。 + 变更解除终止条款:{{变更解除终止条款}} - 法规依据:民法典§467 + 评查要点: + 1. 是否约定了合同变更的条件和程序 + 2. 是否约定了合同解除/终止的条件(法定解除、约定解除、协商解除) + 3. 是否约定了终止通知期限 + 4. 是否有对己方(承租方)的保护条款 + 5. 是否约定了合同终止后的处理(结算、返还等) + + 法规依据:民法典§543、§562、§563 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 变更解除终止条款完整 + fail: 变更解除终止条款不完整 + + references_laws: + - 《民法典》第五百四十三条 + - 《民法典》第五百六十二条 + - 《民法典》第五百六十三条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-019 · 附件条款完整性 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-019 + name: 附件条款完整性 + risk: low + score: 1 + + stages: + - id: "1" + check: ai + prompt: | + 请检查附件条款是否具备基本形式要素。 + + 附件列表:{{附件列表}} + + 评查要点(满足任一核心要素即可 pass,多缺给 warn,全缺给 fail): + 1. 【核心】至少列明了附件的名称(如"屋内资产清单""权属证明""家私家电清单"等) + 2. 【加分】附件有序号标识(如"附件一"、"附件1") + 3. 【加分】附件与合同正文有引用或关联说明 + 4. 【加分】有"附件与合同具有同等法律效力"的声明 + + 注意:租赁合同中附件本身是可选的辅助材料,只要名称清晰就视为合格; + 只有完全缺失附件名称或无任何可识别附件信息时才判 fail。 + + 法规依据:民法典§470 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 附件条款已列明 + fail: 附件条款完全缺失 + + references_laws: + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-022 · 合同名称合法有效 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-022 + name: 合同名称合法有效 + risk: medium + score: 1 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同名称是否合法有效。 + + 合同名称:{{合同名称}} + 租赁物描述:{{租赁物描述}} + 租赁用途:{{租赁用途}} + + 评查要点: + 1. 合同名称必须与合同内容一致(名为"租赁合同"且实际为租赁关系) + 2. 符合民法典有名合同特征的应当采用标准合同名称(如"房屋租赁合同") + 3. 合同名称不应使用会引起误解的名称 + + 法规依据:民法典§467 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" - ' messages: pass: 合同名称与内容一致 fail: 合同名称与内容不一致 + references_laws: - - 《民法典》第四百六十七条 - type: ai_rule - - rule_id: MM-LEASE-028 + - 《民法典》第四百六十七条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-015 · 管辖机构名称准确 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-015 + name: 管辖机构名称准确 + risk: medium + score: 3 + + stages: + - id: "1" + check: ai + prompt: | + 请检查管辖机构名称是否准确。 + + 管辖机构:{{管辖机构}} + 争议解决条款:{{争议解决条款}} + + 评查要点: + 1. 如约定诉讼,法院名称是否准确规范(如"XX市XX区人民法院",而非简称) + 2. 如约定仲裁,仲裁机构名称是否准确(如"中国国际经济贸易仲裁委员会") + 3. 指定的机构是否对本合同争议有管辖权 + 4. 名称不应模糊(如仅写"当地法院"是不合格的) + + 法规依据:民法典§470 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 管辖机构名称准确 + fail: 管辖机构名称不准确或模糊 + + references_laws: + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-018 · 生效条件明确性 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-018 + name: 生效条件明确性 + risk: medium + score: 3 + + stages: + - id: "1" + check: required + field: 生效条件 + - id: "2" + check: required + field: 合同份数 + + logic: "1 AND 2" + + messages: + pass: 生效条件和合同份数明确 + fail: 生效条件或合同份数缺失 + + references_laws: + - 《民法典》第五百零二条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-027 · 税务信息完整性 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-027 + name: 税务信息完整性 + risk: medium + score: 1 + + stages: + - id: "1" + check: ai + prompt: | + 请检查税务信息是否完整。 + + 租金支付方式:{{租金支付方式}} + 租金是否含税:{{租金是否含税}} + + 评查要点: + 1. 是否明确了租金是否含税(含税一口价或另行约定税费分担) + 2. 如租金含税,是否约定由谁开具发票 + 3. 如租金不含税,是否约定税费承担方 + + 法规依据:民法典§470 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 税务信息完整 + fail: 税务信息不完整 + + references_laws: + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-029 · 签署方详细信息校验 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-029 + name: 签署方详细信息校验 + risk: medium + score: 3 + + stages: + - id: "1" + check: required + field: 出租方 + - id: "2" + check: required + field: 承租方 + - id: "3" + check: required + field: 出租方地址 + - id: "4" + check: required + field: 承租方地址 + + logic: "1 AND 2 AND 3 AND 4" + + messages: + pass: 签署方详细信息完整 + fail: 签署方详细信息有缺失 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-021 · 签约背景与法律依据 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-021 + name: 签约背景与法律依据 + risk: high + score: 8 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同的签约背景和法律依据是否准确。 + + 签约背景:{{签约背景}} + 引用法律法规:{{引用法律法规}} + 生效条件:{{生效条件}} + 变更解除终止条款:{{变更解除终止条款}} + + 评查要点: + 1. 签约背景或缘由是否存在(如招标方式、协商过程、签约原因等) + 2. 合同依据的法律、法规、规章必须准确、有效(不能引用已废止的法律) + 3. 合同条款不违反法律禁止性规定,并具有实用性 + 4. 合同按法律法规规定的方式生效、变更、解除并办理相应手续 + + 法规依据:民法典§153、§502 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 签约背景存在且法律依据准确有效 + fail: 签约背景缺失或法律依据存在问题 + + references_laws: + - 《民法典》第一百五十三条 + - 《民法典》第五百零二条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-024 · 标的内容合法 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-024 + name: 标的内容合法 + risk: high + score: 3 + + stages: + - id: "1" + check: ai + prompt: | + 请检查租赁标的内容是否合法。 + + 租赁物描述:{{租赁物描述}} + 租赁用途:{{租赁用途}} + + 评查要点: + 1. 租赁物不违反法律、行政法规的强制性规定(如不得租赁违章建筑、查封财产等) + 2. 租赁用途不违反法律法规(如不得用于违法经营、危险品仓储等超出建筑设计用途的使用) + 3. 如涉及特殊用途(如商用、经营),是否具备相应资质或许可 + 4. 不违背公序良俗 + + 法规依据:民法典§153、§154 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 租赁标的内容合法 + fail: 租赁标的内容存在违法情形 + + references_laws: + - 《民法典》第一百五十三条 + - 《民法典》第一百五十四条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-025 · 合同主体合法有效 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-025 + name: 合同主体合法有效 + risk: high + score: 3 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同主体是否合法有效。 + + 出租方:{{出租方}} + 出租方证件号:{{出租方证件号}} + 承租方:{{承租方}} + 承租方统一社会信用代码:{{承租方统一社会信用代码}} + 承租方负责人:{{承租方负责人}} + + 评查要点: + 1. 承租方为单位时是否有法定代表人 + 2. 出租方身份证号或 USCC 是否齐全 + 3. 主体身份证明材料格式是否有效(身份证 18 位、USCC 18 位) + + 特别说明:承租方统一社会信用代码属于签署阶段(executed)字段, + 在草稿阶段(draft)合同模板中为空是正常情况,不作为判 fail 依据。 + 只有在已签署的合同中(合同编号、签约日期已填写)仍缺失 USCC,才应判 fail。 + + 出租方处分权请在 ZL-LEASE-026 专门检查,本规则不涉及。 + + 法规依据:民法典§143、§171 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 合同主体合法有效 + fail: 合同主体存在合法性问题 + + references_laws: + - 《民法典》第一百四十三条 + - 《民法典》第一百七十一条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-026 · 出租方处分权 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-026 + name: 出租方处分权 + risk: high + score: 3 + + stages: + - id: "1" + check: ai + prompt: | + 请检查出租方是否具有房屋处分权。 + + 出租方:{{出租方}} + 租赁物描述:{{租赁物描述}} + 出租方权属声明:{{出租方权属声明}} + + 评查要点: + 1. 合同中是否有出租方"合法取得所有权"或"有权对房屋进行处分"的承诺条款(重点看"出租方权属声明"字段) + 2. 是否约定了产权纠纷时的责任承担 + 3. 是否说明了权属证明(房产证、不动产权证、经济联合社证明等) + 4. 对商业租赁,是否涉及必要的经营许可资质 + + 注意:评判主要依据"出租方权属声明"字段。若该字段有明确的处分权承诺内容,判 pass 或 warn; + 若该字段为空或仅有模糊表述(如"双方协商一致"),判 fail。 + + 法规依据:民法典§505 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 出租方处分权已明示 + fail: 缺少出租方处分权说明 + + references_laws: + - 《民法典》第五百零五条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-028 · 合同基本信息完整性 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-028 name: 合同基本信息完整性 risk: high - score: 2 + score: 1 applies_in: - - executed + - executed + stages: - - id: '1' - check: required - field: 合同编号 - - id: '2' - check: required - field: 签约日期 - logic: 1 AND 2 + - id: "1" + check: required + field: 合同编号 + - id: "2" + check: required + field: 签约日期 + + logic: "1 AND 2" + messages: pass: 合同编号与签约日期已填写 - fail: 合同编号或签约日期缺失 + fail: 合同编号或签约日期缺失(草稿阶段可能未填写,签署后必须填写) + references_laws: - - 《民法典》第四百七十条 - type: deterministic - - rule_id: MM-LEASE-031 + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-030 · 银行账户信息完整性 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-030 + name: 银行账户信息完整性 + risk: medium + score: 1 + + stages: + - id: "1" + check: required + field: 收款方开户银行 + - id: "2" + check: required + field: 收款方银行账号 + - id: "3" + check: required + field: 收款方账户名称 + + logic: "1 AND 2 AND 3" + + messages: + pass: 收款方银行账户信息完整 + fail: 收款方银行账户信息不完整 + + references_laws: + - 《民法典》第四百七十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-031 · 签署信息完整性 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-031 name: 签署信息完整性 risk: high score: 3 applies_in: - - executed + - executed + stages: - - id: '1' - check: required - field: 签约日期 - - id: '2' - check: required - field: 签约地点 - logic: 1 AND 2 + - id: "1" + check: required + field: 签约日期 + - id: "2" + check: required + field: 签约地点 + + logic: "1 AND 2" + messages: pass: 签约日期与签约地点已填写 fail: 签约日期或签约地点缺失 + references_laws: - - 《民法典》第四百九十条 - type: deterministic - - rule_id: MM-LEASE-032 + - 《民法典》第四百九十条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-032 · 骑缝章检查 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-032 name: 骑缝章检查 risk: medium score: 3 applies_in: - - executed + - executed + stages: - - id: '1' - check: visual - element: 骑缝章 + - id: "1" + check: visual + element: 骑缝章 + + logic: "1" + messages: pass: 骑缝章齐全 fail: 缺少骑缝章或骑缝章不规范 + references_laws: - - 《民法典》第四百九十条 - type: deterministic -- group: 主体信息 - rules: - - rule_id: MM-LEASE-001 - name: 当事人信息齐全 - risk: high - score: 5 - stages: - - id: '1' - check: required - field: 出租方 - - id: '2' - check: required - field: 承租方 - messages: - pass: 出租方和承租方信息齐全 - fail: 缺少出租方或承租方信息 - references_laws: - - 《民法典》第四百七十条 - type: deterministic - - rule_id: MM-LEASE-002 - name: 当事人信息准确完整 - risk: high - score: 3 - stages: - - id: '1' - check: ai - prompt: '请检查合同当事人(出租方和承租方)的信息是否准确完整。 + - 《民法典》第四百九十条 - - 出租方:{{出租方}} - - 出租方法定代表人/负责人:{{出租方法定代表人}} - - 出租方地址:{{出租方地址}} - - 出租方联系电话:{{出租方联系电话}} - - 出租方证件号:{{出租方证件号}} - - - 承租方:{{承租方}} - - 承租方法定代表人:{{承租方法定代表人}} - - 承租方地址:{{承租方地址}} - - 承租方联系电话:{{承租方联系电话}} - - 承租方统一社会信用代码:{{承租方统一社会信用代码}} - - - 评查要点: - - 1. 双方主体名称是否清晰可辨(个人为姓名,单位为公司名) - - 2. 出租方为个人时是否有身份证号;出租方为单位时是否有统一社会信用代码 - - 3. 承租方为单位时是否有法定代表人 - - 4. 双方联系地址和电话是否齐全 - - - 特别说明:承租方统一社会信用代码属于签署阶段(executed)字段, - - 在草稿阶段(draft)合同模板中为空是正常情况,不作为判 fail 依据。 - - 只有在已签署的合同中(合同编号、签约日期已填写)仍缺失 USCC,才应判 fail。 - - - 法规依据:民法典§470 - - ' - messages: - pass: 当事人信息准确完整 - fail: 当事人信息有缺失或不准确 - references_laws: - - 《民法典》第四百七十条 - type: ai_rule - - rule_id: MM-LEASE-025 - name: 合同主体合法有效 - risk: high - score: 3 - stages: - - id: '1' - check: ai - prompt: '请检查合同主体是否合法有效。 - - - 出租方:{{出租方}} - - 出租方证件号:{{出租方证件号}} - - 承租方:{{承租方}} - - 承租方统一社会信用代码:{{承租方统一社会信用代码}} - - 承租方法定代表人:{{承租方法定代表人}} - - - 评查要点: - - 1. 承租方为单位时是否有法定代表人 - - 2. 出租方身份证号或 USCC 是否齐全 - - 3. 主体身份证明材料格式是否有效(身份证 18 位、USCC 18 位) - - - 特别说明:承租方统一社会信用代码属于签署阶段(executed)字段, - - 在草稿阶段(draft)合同模板中为空是正常情况,不作为判 fail 依据。 - - 只有在已签署的合同中(合同编号、签约日期已填写)仍缺失 USCC,才应判 fail。 - - - 出租方处分权请在 MM-LEASE-026 专门检查,本规则不涉及。 - - - 法规依据:民法典§143、§171 - - ' - messages: - pass: 合同主体合法有效 - fail: 合同主体存在合法性问题 - references_laws: - - 《民法典》第一百四十三条 - - 《民法典》第一百七十一条 - type: ai_rule - - rule_id: MM-LEASE-026 - name: 出租方处分权 - risk: high - score: 4 - stages: - - id: '1' - check: ai - prompt: '请检查出租方是否具有房屋处分权。 - - - 出租方:{{出租方}} - - 租赁物描述:{{租赁物描述}} - - 出租方权属声明:{{出租方权属声明}} - - - 评查要点: - - 1. 合同中是否有出租方"合法取得所有权"或"有权对房屋进行处分"的承诺条款(重点看"出租方权属声明"字段) - - 2. 是否约定了产权纠纷时的责任承担 - - 3. 是否说明了权属证明(房产证、不动产权证、经济联合社证明等) - - 4. 对商业租赁,是否涉及必要的经营许可资质 - - - 注意:评判主要依据"出租方权属声明"字段。若该字段有明确的处分权承诺内容,判 pass 或 warn; - - 若该字段为空或仅有模糊表述(如"双方协商一致"),判 fail。 - - - 法规依据:民法典§505 - - ' - messages: - pass: 出租方处分权已明示 - fail: 缺少出租方处分权说明 - references_laws: - - 《民法典》第五百零五条 - type: ai_rule - - rule_id: MM-LEASE-029 - name: 签署方详细信息校验 - risk: medium - score: 3 - stages: - - id: '1' - check: required - field: 出租方 - - id: '2' - check: required - field: 承租方 - - id: '3' - check: required - field: 出租方地址 - - id: '4' - check: required - field: 承租方地址 - logic: 1 AND 2 AND 3 AND 4 - messages: - pass: 签署方详细信息完整 - fail: 签署方详细信息有缺失 - type: deterministic -- group: 标的物与租期 - rules: - - rule_id: MM-LEASE-003 - name: 租赁标的明确 - risk: high - score: 5 - stages: - - id: '1' - check: ai - prompt: '请检查租赁合同中租赁标的信息是否明确。 - - - 租赁物描述:{{租赁物描述}} - - 租赁用途:{{租赁用途}} - - - 评查要点: - - 1. 是否明确了租赁物的名称(房屋、办公场所、店铺等) - - 2. 是否明确了租赁物的具体位置/地址 - - 3. 是否明确了租赁物的面积/规格 - - 4. 是否明确了租赁用途(居住、办公、商用等) - - 5. 租赁用途应当合法且与租赁物性质相符 - - - 法规依据:民法典§703、§704 - - ' - messages: - pass: 租赁标的信息明确 - fail: 租赁标的信息不明确或不完整 - references_laws: - - 《民法典》第七百零三条 - - 《民法典》第七百零四条 - type: ai_rule - - rule_id: MM-LEASE-004 - name: 租赁期限合规 - risk: high - score: 5 - stages: - - id: '1' - check: required - field: 租赁起始日期 - - id: '2' - check: required - field: 租赁结束日期 - - id: '3' - check: ai - prompt: '请检查租赁合同的租赁期限是否合规。 - - - 起始日期:{{租赁起始日期}} - - 结束日期:{{租赁结束日期}} - - 退租返还条款(含续租约定):{{退租返还条款}} - - - 评查要点: - - 1. 起止日期是否明确 - - 2. 租赁期限是否超过二十年(超过二十年的部分无效) - - 3. 租赁期限六个月以上的应当采用书面形式(本合同为书面) - - 4. 如有续租约定,续租后累计期限是否可能超过二十年 - - - 法规依据:民法典§705、§707 - - ' - logic: 1 AND 2 AND 3 - messages: - pass: 租赁期限明确且合规 - fail: 租赁期限缺失或超过法定上限 - references_laws: - - 《民法典》第七百零五条 - - 《民法典》第七百零七条 - type: ai_rule - - rule_id: MM-LEASE-007 - name: 合同地点具体准确 - risk: medium - score: 5 - stages: - - id: '1' - check: ai - prompt: '请检查合同地点信息是否具体准确。 - - - 履行地点(租赁房屋位置):{{履行地点}} - - 签约地点:{{签约地点}} - - 出租方地址:{{出租方地址}} - - 承租方地址:{{承租方地址}} - - - 评查要点: - - 1. 租赁房屋的坐落地点是否具体(到具体门牌号/楼层) - - 2. 签约地点是否明确 - - 3. 双方地址是否完整可供送达 - - - 法规依据:民法典§470 - - ' - messages: - pass: 合同地点信息具体准确 - fail: 合同地点信息不具体或缺失 - references_laws: - - 《民法典》第四百七十条 - type: ai_rule - - rule_id: MM-LEASE-008 - name: 履行方式具体准确 - risk: medium - score: 3 - stages: - - id: '1' - check: ai - prompt: '请检查合同履行方式是否具体准确。 - - - 交付方式:{{交付方式}} - - 租赁用途:{{租赁用途}} - - - 评查要点: - - 1. 房屋交付时间和条件是否明确 - - 2. 是否约定了钥匙、设施设备的移交 - - 3. 交付状态(空房/带装修/带家具等)是否明确 - - 4. 验收或确认程序是否约定 - - - 法规依据:民法典§708、§709 - - ' - messages: - pass: 履行方式具体明确 - fail: 履行方式不具体或缺失 - references_laws: - - 《民法典》第七百零八条 - - 《民法典》第七百零九条 - type: ai_rule - - rule_id: MM-LEASE-024 - name: 标的内容合法 - risk: high - score: 3 - stages: - - id: '1' - check: ai - prompt: '请检查租赁标的内容是否合法。 - - - 租赁物描述:{{租赁物描述}} - - 租赁用途:{{租赁用途}} - - - 评查要点: - - 1. 租赁物不违反法律、行政法规的强制性规定(如不得租赁违章建筑、查封财产等) - - 2. 租赁用途不违反法律法规(如不得用于违法经营、危险品仓储等超出建筑设计用途的使用) - - 3. 如涉及特殊用途(如商用、经营),是否具备相应资质或许可 - - 4. 不违背公序良俗 - - - 法规依据:民法典§153、§154 - - ' - messages: - pass: 租赁标的内容合法 - fail: 租赁标的内容存在违法情形 - references_laws: - - 《民法典》第一百五十三条 - - 《民法典》第一百五十四条 - type: ai_rule -- group: 租金与支付 - rules: - - rule_id: MM-LEASE-005 - name: 租金金额完整 - risk: high - score: 3 - stages: - - id: '1' - check: required - field: 租金金额 - - id: '2' - check: required - field: 租金金额大写 - - id: '3' - check: required - field: 租金计算周期 - - id: '4' - check: amount_match - number: 租金金额 - chinese: 租金金额大写 - logic: 1 AND 2 AND 3 AND 4 - messages: - pass: 租金金额完整且大小写一致 - fail: 租金金额缺失或大小写不一致 - references_laws: - - 《民法典》第四百七十条 - type: deterministic - - rule_id: MM-LEASE-006 - name: 租金及支付方式完整 - risk: high - score: 5 - stages: - - id: '1' - check: required - field: 租金支付方式 - - id: '2' - check: ai - prompt: '请检查租金支付方式是否完整。 - - - 租金支付方式:{{租金支付方式}} - - 收款方开户银行:{{收款方开户银行}} - - 收款方银行账号:{{收款方银行账号}} - - - 评查要点: - - 1. 支付方式是否明确(银行转账、现金等) - - 2. 支付周期是否明确(月付、季付、年付、一次性等) - - 3. 是否约定了逾期支付的后果(滞纳金、解除权等) - - 4. 付款账户信息是否完整(开户行、账号、户名) - - - 法规依据:民法典§721、§722 - - ' - logic: 1 AND 2 - messages: - pass: 租金支付方式约定完整 - fail: 租金支付方式约定不完整 - references_laws: - - 《民法典》第七百二十一条 - - 《民法典》第七百二十二条 - type: ai_rule - - rule_id: MM-LEASE-027 - name: 税务信息完整性 - risk: medium - score: 1 - stages: - - id: '1' - check: ai - prompt: '请检查税务信息是否完整。 - - - 租金支付方式:{{租金支付方式}} - - 租金是否含税:{{租金是否含税}} - - - 评查要点: - - 1. 是否明确了租金是否含税(含税一口价或另行约定税费分担) - - 2. 如租金含税,是否约定由谁开具发票 - - 3. 如租金不含税,是否约定税费承担方 - - - 法规依据:民法典§470 - - ' - messages: - pass: 税务信息完整 - fail: 税务信息不完整 - references_laws: - - 《民法典》第四百七十条 - type: ai_rule - - rule_id: MM-LEASE-030 - name: 银行账户信息完整性 - risk: medium - score: 2 - stages: - - id: '1' - check: required - field: 收款方开户银行 - - id: '2' - check: required - field: 收款方银行账号 - - id: '3' - check: required - field: 收款方账户名称 - logic: 1 AND 2 AND 3 - messages: - pass: 收款方银行账户信息完整 - fail: 收款方银行账户信息不完整 - references_laws: - - 《民法典》第四百七十条 - type: deterministic - - rule_id: MM-LEASE-034 - name: 押金/保证金条款 - risk: medium - score: 2 - activate_if: 约定押金 == '是' - stages: - - id: '1' - check: ai - prompt: '请检查押金/保证金条款是否完整(合同约定押金时)。 - - - 租金支付方式:{{租金支付方式}} - - 退租返还条款:{{退租返还条款}} - - - 评查要点: - - 1. 押金金额是否明确 - - 2. 押金退还的条件是否明确(租赁期满、租赁物完好交还等) - - 3. 押金退还的时间是否明确 - - 4. 是否约定了押金可扣减的情形(欠缴租金、损坏赔偿等) - - 5. 押金金额是否合理(一般为 1-3 个月租金) - - - 法规依据:民法典§586、§587 - - ' - messages: - pass: 押金条款完整 - fail: 押金条款要素不全 - references_laws: - - 《民法典》第五百八十六条 - - 《民法典》第五百八十七条 - type: ai_rule -- group: 使用与费用 - rules: - - rule_id: MM-LEASE-009 - name: 维修责任约定 - risk: medium - score: 3 - stages: - - id: '1' - check: required - field: 维修责任条款 - - id: '2' - check: ai - prompt: '请检查维修责任条款是否明确。 - - - 维修责任条款:{{维修责任条款}} - - - 评查要点: - - 1. 是否明确了出租方的维修义务范围(主体结构、设施设备等) - - 2. 是否明确了承租方的维修义务范围(日常维护、合理使用等) - - 3. 维修费用的承担方是否明确 - - 4. 是否约定维修期间的租金处理(如长期维修时租金减免) - - 5. 因承租方过错导致损坏的维修责任是否明确 - - - 法规依据:民法典§712、§713 - - ' - logic: 1 AND 2 - messages: - pass: 维修责任约定明确 - fail: 维修责任缺失或不明确 - references_laws: - - 《民法典》第七百一十二条 - - 《民法典》第七百一十三条 - type: ai_rule - - rule_id: MM-LEASE-010 - name: 转租条款 - risk: medium - score: 2 - stages: - - id: '1' - check: required - field: 转租条款 - - id: '2' - check: ai - prompt: '请检查转租条款是否明确。 - - - 转租条款:{{转租条款}} - - - 评查要点: - - 1. 是否明确约定了是否允许转租 - - 2. 如允许转租,是否约定了转租的条件和程序(如需经出租方书面同意) - - 3. 如禁止转租,是否明确了违反禁止转租的后果 - - 4. 是否约定了转租后的责任承担 - - - 法规依据:民法典§716、§717、§718 - - ' - logic: 1 AND 2 - messages: - pass: 转租条款约定明确 - fail: 转租条款缺失或不明确 - references_laws: - - 《民法典》第七百一十六条 - - 《民法典》第七百一十七条 - - 《民法典》第七百一十八条 - type: ai_rule - - rule_id: MM-LEASE-011 - name: 租赁物返还与退租 - risk: medium - score: 3 - stages: - - id: '1' - check: required - field: 退租返还条款 - - id: '2' - check: ai - prompt: '请检查退租和返还条款是否完整。 - - - 退租返还条款:{{退租返还条款}} - - - 评查要点: - - 1. 是否约定了租赁物返还的条件和时间 - - 2. 是否约定了返还时租赁物应处的状态(恢复原状、正常损耗等) - - 3. 是否约定了承租方的优先承租权(房屋租赁中法定享有) - - 4. 是否约定了提前退租的条件和违约责任 - - 5. 是否约定了租赁物返还时的交接验收程序 - - - 法规依据:民法典§733、§734 - - ' - logic: 1 AND 2 - messages: - pass: 退租及返还条款完整 - fail: 退租及返还条款不完整 - references_laws: - - 《民法典》第七百三十三条 - - 《民法典》第七百三十四条 - type: ai_rule -- group: 违约与争议 - rules: - - rule_id: MM-LEASE-012 - name: 违约责任形式明确 - risk: high - score: 5 - stages: - - id: '1' - check: required - field: 违约责任条款 - - id: '2' - check: ai - prompt: '请检查违约责任条款是否形式明确。 - - - 违约责任条款:{{违约责任条款}} - - - 评查要点: - - 1. 是否明确了违约方和违约情形 - - 2. 责任形式是否具体(支付违约金、赔偿损失、继续履行等) - - 3. 是否覆盖双方(出租方违约和承租方违约均有约定) - - 4. 是否有兜底条款(如未尽事宜如何处理) - - - 法规依据:民法典§577 - - ' - logic: 1 AND 2 - messages: - pass: 违约责任形式明确 - fail: 违约责任形式不明确或缺失 - references_laws: - - 《民法典》第五百七十七条 - type: ai_rule - - rule_id: MM-LEASE-013 - name: 违约金条款完整合理 - risk: high - score: 7 - stages: - - id: '1' - check: required - field: 违约金金额 - - id: '2' - check: ai - prompt: '请检查违约金条款是否完整合理。 - - - 违约金金额:{{违约金金额}} - - 违约金计算方式:{{违约金计算方式}} - - 违约责任条款:{{违约责任条款}} - - 租金金额:{{租金金额}} - - - 评查要点: - - 1. 违约金金额或计算方式是否明确 - - 2. 违约金标准是否合理(约定过高可依法调整,一般不超过造成损失的 30%) - - 3. 是否约定了逾期支付租金的违约金 - - 4. 是否覆盖双方违约情形 - - - 法规依据:民法典§585 - - ' - logic: 1 AND 2 - messages: - pass: 违约金条款完整合理 - fail: 违约金条款不完整或标准不合理 - references_laws: - - 《民法典》第五百八十五条 - type: ai_rule - - rule_id: MM-LEASE-014 - name: 争议解决方式明确 - risk: high - score: 4 - stages: - - id: '1' - check: required - field: 争议解决条款 - - id: '2' - check: ai - prompt: '请检查争议解决方式是否明确。 - - - 争议解决条款:{{争议解决条款}} - - 管辖机构:{{管辖机构}} - - - 评查要点: - - 1. 是否明确了争议解决方式(协商/诉讼/仲裁,只能择一作为最终方式) - - 2. 不能同时约定仲裁和诉讼(互斥) - - 3. 如约定诉讼,是否指定了具体的管辖法院 - - 4. 如约定仲裁,是否指定了具体的仲裁机构 - - - 法规依据:民法典§470 - - ' - logic: 1 AND 2 - messages: - pass: 争议解决方式明确 - fail: 争议解决方式不明确或约定冲突 - references_laws: - - 《民法典》第四百七十条 - type: ai_rule - - rule_id: MM-LEASE-015 - name: 管辖机构名称准确 - risk: medium - score: 3 - stages: - - id: '1' - check: ai - prompt: '请检查管辖机构名称是否准确。 - - - 管辖机构:{{管辖机构}} - - 争议解决条款:{{争议解决条款}} - - - 评查要点: - - 1. 如约定诉讼,法院名称是否准确规范(如"XX市XX区人民法院",而非简称) - - 2. 如约定仲裁,仲裁机构名称是否准确(如"中国国际经济贸易仲裁委员会") - - 3. 指定的机构是否对本合同争议有管辖权 - - 4. 名称不应模糊(如仅写"当地法院"是不合格的) - - - 法规依据:民法典§470 - - ' - messages: - pass: 管辖机构名称准确 - fail: 管辖机构名称不准确或模糊 - references_laws: - - 《民法典》第四百七十条 - type: ai_rule - - rule_id: MM-LEASE-016 - name: 不可抗力条款完整性 - risk: medium - score: 3 - stages: - - id: '1' - check: required - field: 不可抗力条款 - - id: '2' - check: ai - prompt: '请检查不可抗力条款是否完整(三要素)。 - - - 不可抗力条款:{{不可抗力条款}} - - - 评查要点(三要素): - - 1. 是否明确了不可抗力的定义/类型范围 - - 2. 是否约定了通知义务和通知时限 - - 3. 是否约定了免责后果和合同处理方式(如延期履行、解除合同等) - - - 法规依据:民法典§180、§590 - - ' - logic: 1 AND 2 - messages: - pass: 不可抗力条款完整 - fail: 不可抗力条款缺失或要素不全 - references_laws: - - 《民法典》第一百八十条 - - 《民法典》第五百九十条 - type: ai_rule - - rule_id: MM-LEASE-017 - name: 变更解除终止条款完整性 - risk: high - score: 5 - stages: - - id: '1' - check: ai - prompt: '请检查变更、解除、终止条款是否完整。 - - - 变更解除终止条款:{{变更解除终止条款}} - - - 评查要点: - - 1. 是否约定了合同变更的条件和程序 - - 2. 是否约定了合同解除/终止的条件(法定解除、约定解除、协商解除) - - 3. 是否约定了终止通知期限 - - 4. 是否有对己方(采购/承租方)的保护条款 - - 5. 是否约定了合同终止后的处理(结算、返还等) - - - 法规依据:民法典§543、§562、§563 - - ' - messages: - pass: 变更解除终止条款完整 - fail: 变更解除终止条款不完整 - references_laws: - - 《民法典》第五百四十三条 - - 《民法典》第五百六十二条 - - 《民法典》第五百六十三条 - type: ai_rule -- group: 附件与特征分类 - rules: - - rule_id: MM-LEASE-019 - name: 附件条款完整性 - risk: low - score: 2 - stages: - - id: '1' - check: ai - prompt: '请检查附件条款是否具备基本形式要素。 - - - 附件列表:{{附件列表}} - - - 评查要点(满足任一核心要素即可 pass,多缺给 warn,全缺给 fail): - - 1. 【核心】至少列明了附件的名称(如"屋内资产清单""权属证明""家私家电清单"等) - - 2. 【加分】附件有序号标识(如"附件一"、"附件1") - - 3. 【加分】附件与合同正文有引用或关联说明 - - 4. 【加分】有"附件与合同具有同等法律效力"的声明 - - - 注意:租赁合同中附件本身是可选的辅助材料,只要名称清晰就视为合格; - - 只有完全缺失附件名称或无任何可识别附件信息时才判 fail。 - - - 法规依据:民法典§470 - - ' - messages: - pass: 附件条款已列明 - fail: 附件条款完全缺失 - references_laws: - - 《民法典》第四百七十条 - type: ai_rule - - rule_id: MM-LEASE-020 - name: 补充协议条款完整性 - risk: medium - score: 2 - stages: - - id: '1' - check: required - field: 补充协议条款 - messages: - pass: 补充协议条款存在 - fail: 缺少补充协议兜底条款 - references_laws: - - 《民法典》第五百四十三条 - type: deterministic - - rule_id: MM-LEASE-033 + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-033 · 保密条款完整性 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-033 name: 保密条款完整性 risk: medium score: 2 activate_if: 涉及保密信息 == '是' + stages: - - id: '1' - check: ai - prompt: '请检查保密条款是否完整(合同涉及保密信息时)。 + - id: "1" + check: ai + prompt: | + 请检查保密条款是否完整(合同涉及保密信息时)。 + 租赁物描述:{{租赁物描述}} + 租赁用途:{{租赁用途}} - 租赁物描述:{{租赁物描述}} + 评查要点(三要素): + 1. 是否明确了保密信息的范围(商业秘密、技术秘密、个人信息等) + 2. 是否约定了保密期限 + 3. 是否约定了违反保密义务的违约责任 - 租赁用途:{{租赁用途}} + 法规依据:民法典§501 + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" - 评查要点(三要素): + logic: "1" - 1. 是否明确了保密信息的范围(商业秘密、技术秘密、个人信息等) - - 2. 是否约定了保密期限 - - 3. 是否约定了违反保密义务的违约责任 - - - 法规依据:民法典§501 - - ' messages: pass: 保密条款完整 fail: 保密条款要素不全 + references_laws: - - 《民法典》第五百零一条 - type: ai_rule + - 《民法典》第五百零一条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-034 · 押金/保证金条款 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-034 + name: 押金/保证金条款 + risk: medium + score: 2 + + stages: + - id: "1" + check: ai + prompt: | + 请检查押金/保证金条款是否完整。 + + 约定押金:{{约定押金}} + 租金支付方式:{{租金支付方式}} + 退租返还条款:{{退租返还条款}} + + 评查要点: + 1. **如果约定押金为"是"**:检查押金金额、退还条件、退还时间、可扣减情形是否明确,金额是否合理(一般为 1-3 个月租金) + 2. **如果约定押金为"否"或未明确**:给予预警,说明租赁合同通常应约定押金以保障出租方权益,建议补充 + + 法规依据:民法典§586、§587 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 押金条款完整 + fail: 押金条款缺失或要素不全(租赁合同建议约定押金) + + references_laws: + - 《民法典》第五百八十六条 + - 《民法典》第五百八十七条 + + # ═════════════════════════════════════════════════════════════ + # ZL-LEASE-035 · 居间方条款完整性 + # ═════════════════════════════════════════════════════════════ + - rule_id: ZL-LEASE-035 + name: 居间方条款完整性 + risk: low + score: 2 + activate_if: 约定居间方 == '是' + + stages: + - id: "1" + check: ai + prompt: | + 请检查居间方/中介方条款是否完整(合同有居间方参与时)。 + + 居间方名称:{{居间方名称}} + 居间方服务费:{{居间方服务费}} + 居间方负责人:{{居间方负责人}} + + 评查要点: + 1. 居间方名称是否明确(公司全称) + 2. 居间服务费金额及支付方式是否明确(谁支付、支付金额、支付时间) + 3. 居间方责任界定是否清晰(见证服务、促成交易、纠纷责任划分) + 4. 服务费支付条件是否合理(如'合同取消不影响服务费收取'是否合理) + + 法规依据:民法典§961-965(居间合同) + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 居间方条款完整 + fail: 居间方条款要素不全(缺少名称、服务费或责任界定) + + references_laws: + - 《民法典》第九百六十一条 + - 《民法典》第九百六十三条 + - 《民法典》第九百六十五条 diff --git a/rules/contract_lease/rules.yaml.bak b/rules/contract_lease/rules.yaml.bak new file mode 100644 index 0000000..89ea45b --- /dev/null +++ b/rules/contract_lease/rules.yaml.bak @@ -0,0 +1,1453 @@ +metadata: + type_id: contract.lease + name: 不动产租赁合同 + version: '2.0' + last_updated: '2026-04-14' + tags: + - 合同 + - 租赁 + - 不动产 + - 房屋 + references_laws: + - 《民法典》第四百六十七条 + - 《民法典》第四百七十条 + - 《民法典》第四百九十条 + - 《民法典》第七百零三条至第七百三十四条 + description: '依据《中华人民共和国民法典》合同编·通则(第467、470、490条)及租赁合同章(第703-734条)。 + + 适用于房屋、办公场所、店铺等不动产租赁合同的评查。 + + 覆盖签署前审查(draft)和签署后审计(executed)两个阶段。 + + 基于旧系统 00_通用规则.json + 06_租赁合同.json 合并、去重、样本校准而成(39→33 条)。 + + ' +extract: +- group: 基础信息 + note: 合同基础元信息、签约背景和签署要素 + fields: + - name: 合同名称 + type: verbatim + required_from: draft + desc: 合同标题/项目名称 + deep_retry: false + - name: 签约背景 + type: string + required_from: draft + desc: 合同签约背景/缘由(如招标方式、协商过程等开篇段落) + deep_retry: false + - name: 引用法律法规 + type: string + required_from: draft + desc: 合同引用的法律、法规、规章的列表 + deep_retry: false + - name: 生效条件 + type: string + required_from: draft + desc: 合同生效条件(签字盖章、经批准等) + deep_retry: false + - name: 签约日期 + type: date + required_from: executed + desc: 合同签订日期 + deep_retry: false + - name: 签约地点 + type: verbatim + required_from: executed + desc: 合同签订地点 + deep_retry: false + - name: 合同编号 + type: verbatim + required_from: executed + desc: 合同唯一编号 + deep_retry: false + - name: 合同份数 + type: integer + required_from: executed + desc: 合同正本份数 + deep_retry: false +- group: 主体信息 + note: 出租方、承租方及联系方式 + fields: + - name: 出租方 + type: verbatim + required_from: draft + desc: 出租方(甲方)全称,个人为姓名,单位为公司名 + deep_retry: false + - name: 出租方证件号 + type: verbatim + required_from: draft + desc: 出租方身份证号(个人)或统一社会信用代码(单位) + deep_retry: false + - name: 出租方地址 + type: verbatim + required_from: draft + desc: 出租方住址或注册地址 + deep_retry: false + - name: 出租方法定代表人 + type: verbatim + required_from: draft + desc: 出租方法定代表人或负责人姓名(出租方为单位时) + deep_retry: false + - name: 出租方联系电话 + type: verbatim + required_from: draft + desc: 出租方联系电话 + deep_retry: false + - name: 承租方 + type: verbatim + required_from: draft + desc: 承租方(乙方)全称 + deep_retry: false + - name: 承租方统一社会信用代码 + type: verbatim + required_from: executed + desc: 承租方18位统一社会信用代码(单位承租人)。签署阶段必填,draft 阶段可为空。 + deep_retry: false + - name: 承租方地址 + type: verbatim + required_from: draft + desc: 承租方住址或注册地址 + deep_retry: false + - name: 承租方法定代表人 + type: verbatim + required_from: draft + desc: 承租方法定代表人或负责人姓名 + deep_retry: false + - name: 承租方联系电话 + type: verbatim + required_from: draft + desc: 承租方联系电话 + deep_retry: false +- group: 标的物与租期 + note: 租赁标的、交付、权属和租期安排 + fields: + - name: 租赁物描述 + type: string + required_from: draft + desc: 租赁物的名称、坐落地址、建筑面积的完整描述 + deep_retry: false + - name: 租赁用途 + type: string + required_from: draft + desc: 租赁物的约定使用用途(居住、办公、商用等) + deep_retry: false + - name: 交付方式 + type: string + required_from: draft + desc: 房屋移交的方式和程序:交付时间、交付状态(空房/带装修/含家具)、钥匙和设施移交、验收程序。不含租金支付相关内容。 + deep_retry: false + - name: 履行地点 + type: verbatim + required_from: draft + desc: 租赁房屋坐落地点(履行地点) + deep_retry: false + - name: 出租方权属声明 + type: string + required_from: draft + desc: 出租方对房屋所有权/处分权的明确承诺条款原文,以及产权纠纷的责任承担约定。关键词包括'承诺合法取得所有权''有权对房屋进行处分''产权证明''抵押/查封情况'等。若合同未约定,填空字符串。 + deep_retry: false + - name: 租赁起始日期 + type: date + required_from: draft + desc: 租赁期限起始日期 + deep_retry: false + - name: 租赁结束日期 + type: date + required_from: draft + desc: 租赁期限结束日期 + deep_retry: false + - name: 退租返还条款 + type: string + required_from: draft + desc: 租赁期满返还条件、返还状态、优先续租权的约定 + deep_retry: false +- group: 租金与支付 + note: 租金金额、支付安排、税务与押金特征 + fields: + - name: 租金金额 + type: money + required_from: draft + desc: 租金数字金额(月租、年租或租期总额) + deep_retry: true + - name: 租金金额大写 + type: verbatim + required_from: draft + desc: 租金中文大写金额 + deep_retry: false + - name: 租金计算周期 + type: string + required_from: draft + desc: 租金计算周期(月付、年付、一次性等) + deep_retry: false + - name: 租金支付方式 + type: string + required_from: draft + desc: 付款周期、方式、时间节点、逾期处理的完整描述 + deep_retry: false + - name: 收款方开户银行 + type: verbatim + required_from: executed + desc: 收款方(通常为出租方)银行开户行全称 + deep_retry: false + - name: 收款方银行账号 + type: verbatim + required_from: executed + desc: 收款方银行账号 + deep_retry: false + - name: 收款方账户名称 + type: verbatim + required_from: executed + desc: 收款方账户名称(与出租方主体一致) + deep_retry: false + - name: 租金是否含税 + type: + - 是 + - 否 + required_from: draft + allowed: + - 是 + - 否 + desc: 租金金额是否已包含税费。填"是":合同中明确"含税"或"租金已包含税费";填"否":另行约定税费分担或未说明。 + deep_retry: false + - name: 约定押金 + type: + - 是 + - 否 + required_from: draft + allowed: + - 是 + - 否 + desc: '合同中是否约定了押金、保证金或类似担保金额。 填"是"的条件:明确约定"押金""保证金""定金"及其金额。 填"否"的条件:未约定任何押金/保证金(一次性付清、无需担保等)。 + + ' + deep_retry: false +- group: 使用与费用 + note: 使用方式、转租和维修责任等履约条款 + fields: + - name: 维修责任条款 + type: string + required_from: draft + desc: 出租方和承租方的维修责任分工、费用负担 + deep_retry: false + - name: 转租条款 + type: string + required_from: draft + desc: 是否允许转租、转租条件的完整约定 + deep_retry: false +- group: 违约与争议 + note: 违约责任、解除终止、不可抗力和争议解决 + fields: + - name: 违约责任条款 + type: string + required_from: draft + desc: 违约责任的完整条款内容(双方违约情形和责任) + deep_retry: false + - name: 违约金金额 + type: money + required_from: draft + desc: 违约金具体金额或计算基数 + deep_retry: false + - name: 违约金计算方式 + type: string + required_from: draft + desc: 违约金计算标准(固定金额/比例/按日计算等) + deep_retry: false + - name: 争议解决条款 + type: string + required_from: draft + desc: 争议解决方式的完整条款(协商/诉讼/仲裁) + deep_retry: false + - name: 管辖机构 + type: verbatim + required_from: draft + desc: 指定的法院或仲裁机构名称 + deep_retry: false + - name: 不可抗力条款 + type: string + required_from: draft + desc: 不可抗力定义、通知义务、免责约定的完整条款 + deep_retry: false + - name: 变更解除终止条款 + type: string + required_from: draft + desc: 合同变更、解除、终止的条件和程序 + deep_retry: false +- group: 附件与特征分类 + note: 附件补充条款和条件激活字段 + fields: + - name: 附件列表 + type: string + required_from: draft + desc: 合同附件的序号、名称、类型的列表 + deep_retry: false + - name: 补充协议条款 + type: string + required_from: draft + desc: 未尽事宜补充、补充协议效力等约定 + deep_retry: false + - name: 涉及保密信息 + type: + - 是 + - 否 + required_from: draft + allowed: + - 是 + - 否 + desc: '合同中是否存在保密条款或涉及商业秘密、技术秘密。 填"是"的条件:出现"保密""商业秘密""技术秘密""不得泄露"等关键词且有实质条款。 填"否"的条件:普通房屋租赁,无任何保密相关条款。 + + ' + deep_retry: false +visual_elements: + seals: + - id: 出租方签章 + name: 出租方签字或公章 + required: true + required_from: executed + - id: 承租方签章 + name: 承租方盖章 + required: true + required_from: executed + cross_page_seals: + - id: 骑缝章 + name: 合同骑缝章 + required: true + required_from: executed +rules: +- group: 基础信息 + rules: + - rule_id: MM-LEASE-018 + name: 生效条件明确性 + risk: medium + score: 4 + stages: + - id: '1' + check: required + field: 生效条件 + - id: '2' + check: required + field: 合同份数 + logic: 1 AND 2 + messages: + pass: 生效条件和合同份数明确 + fail: 生效条件或合同份数缺失 + references_laws: + - 《民法典》第五百零二条 + type: deterministic + - rule_id: MM-LEASE-021 + name: 签约背景与法律依据 + risk: high + score: 9 + stages: + - id: '1' + check: ai + prompt: '请检查合同的签约背景和法律依据是否准确。 + + + 签约背景:{{签约背景}} + + 引用法律法规:{{引用法律法规}} + + 生效条件:{{生效条件}} + + 变更解除终止条款:{{变更解除终止条款}} + + + 评查要点: + + 1. 签约背景或缘由是否存在(如招标方式、协商过程、签约原因等) + + 2. 合同依据的法律、法规、规章必须准确、有效(不能引用已废止的法律) + + 3. 合同条款不违反法律禁止性规定,并具有实用性 + + 4. 合同按法律法规规定的方式生效、变更、解除并办理相应手续 + + + 法规依据:民法典§153、§502 + + ' + messages: + pass: 签约背景存在且法律依据准确有效 + fail: 签约背景缺失或法律依据存在问题 + references_laws: + - 《民法典》第一百五十三条 + - 《民法典》第五百零二条 + type: ai_rule + - rule_id: MM-LEASE-022 + name: 合同名称合法有效 + risk: medium + score: 2 + stages: + - id: '1' + check: ai + prompt: '请检查合同名称是否合法有效。 + + + 合同名称:{{合同名称}} + + 租赁物描述:{{租赁物描述}} + + 租赁用途:{{租赁用途}} + + + 评查要点: + + 1. 合同名称必须与合同内容一致(名为"租赁合同"且实际为租赁关系) + + 2. 符合民法典有名合同特征的应当采用标准合同名称(如"房屋租赁合同") + + 3. 合同名称不应使用会引起误解的名称 + + + 法规依据:民法典§467 + + ' + messages: + pass: 合同名称与内容一致 + fail: 合同名称与内容不一致 + references_laws: + - 《民法典》第四百六十七条 + type: ai_rule + - rule_id: MM-LEASE-028 + name: 合同基本信息完整性 + risk: high + score: 2 + applies_in: + - executed + stages: + - id: '1' + check: required + field: 合同编号 + - id: '2' + check: required + field: 签约日期 + logic: 1 AND 2 + messages: + pass: 合同编号与签约日期已填写 + fail: 合同编号或签约日期缺失 + references_laws: + - 《民法典》第四百七十条 + type: deterministic + - rule_id: MM-LEASE-031 + name: 签署信息完整性 + risk: high + score: 3 + applies_in: + - executed + stages: + - id: '1' + check: required + field: 签约日期 + - id: '2' + check: required + field: 签约地点 + logic: 1 AND 2 + messages: + pass: 签约日期与签约地点已填写 + fail: 签约日期或签约地点缺失 + references_laws: + - 《民法典》第四百九十条 + type: deterministic + - rule_id: MM-LEASE-032 + name: 骑缝章检查 + risk: medium + score: 3 + applies_in: + - executed + stages: + - id: '1' + check: visual + element: 骑缝章 + messages: + pass: 骑缝章齐全 + fail: 缺少骑缝章或骑缝章不规范 + references_laws: + - 《民法典》第四百九十条 + type: deterministic +- group: 主体信息 + rules: + - rule_id: MM-LEASE-001 + name: 当事人信息齐全 + risk: high + score: 5 + stages: + - id: '1' + check: required + field: 出租方 + - id: '2' + check: required + field: 承租方 + messages: + pass: 出租方和承租方信息齐全 + fail: 缺少出租方或承租方信息 + references_laws: + - 《民法典》第四百七十条 + type: deterministic + - rule_id: MM-LEASE-002 + name: 当事人信息准确完整 + risk: high + score: 3 + stages: + - id: '1' + check: ai + prompt: '请检查合同当事人(出租方和承租方)的信息是否准确完整。 + + + 出租方:{{出租方}} + + 出租方法定代表人/负责人:{{出租方法定代表人}} + + 出租方地址:{{出租方地址}} + + 出租方联系电话:{{出租方联系电话}} + + 出租方证件号:{{出租方证件号}} + + + 承租方:{{承租方}} + + 承租方法定代表人:{{承租方法定代表人}} + + 承租方地址:{{承租方地址}} + + 承租方联系电话:{{承租方联系电话}} + + 承租方统一社会信用代码:{{承租方统一社会信用代码}} + + + 评查要点: + + 1. 双方主体名称是否清晰可辨(个人为姓名,单位为公司名) + + 2. 出租方为个人时是否有身份证号;出租方为单位时是否有统一社会信用代码 + + 3. 承租方为单位时是否有法定代表人 + + 4. 双方联系地址和电话是否齐全 + + + 特别说明:承租方统一社会信用代码属于签署阶段(executed)字段, + + 在草稿阶段(draft)合同模板中为空是正常情况,不作为判 fail 依据。 + + 只有在已签署的合同中(合同编号、签约日期已填写)仍缺失 USCC,才应判 fail。 + + + 法规依据:民法典§470 + + ' + messages: + pass: 当事人信息准确完整 + fail: 当事人信息有缺失或不准确 + references_laws: + - 《民法典》第四百七十条 + type: ai_rule + - rule_id: MM-LEASE-025 + name: 合同主体合法有效 + risk: high + score: 3 + stages: + - id: '1' + check: ai + prompt: '请检查合同主体是否合法有效。 + + + 出租方:{{出租方}} + + 出租方证件号:{{出租方证件号}} + + 承租方:{{承租方}} + + 承租方统一社会信用代码:{{承租方统一社会信用代码}} + + 承租方法定代表人:{{承租方法定代表人}} + + + 评查要点: + + 1. 承租方为单位时是否有法定代表人 + + 2. 出租方身份证号或 USCC 是否齐全 + + 3. 主体身份证明材料格式是否有效(身份证 18 位、USCC 18 位) + + + 特别说明:承租方统一社会信用代码属于签署阶段(executed)字段, + + 在草稿阶段(draft)合同模板中为空是正常情况,不作为判 fail 依据。 + + 只有在已签署的合同中(合同编号、签约日期已填写)仍缺失 USCC,才应判 fail。 + + + 出租方处分权请在 MM-LEASE-026 专门检查,本规则不涉及。 + + + 法规依据:民法典§143、§171 + + ' + messages: + pass: 合同主体合法有效 + fail: 合同主体存在合法性问题 + references_laws: + - 《民法典》第一百四十三条 + - 《民法典》第一百七十一条 + type: ai_rule + - rule_id: MM-LEASE-026 + name: 出租方处分权 + risk: high + score: 4 + stages: + - id: '1' + check: ai + prompt: '请检查出租方是否具有房屋处分权。 + + + 出租方:{{出租方}} + + 租赁物描述:{{租赁物描述}} + + 出租方权属声明:{{出租方权属声明}} + + + 评查要点: + + 1. 合同中是否有出租方"合法取得所有权"或"有权对房屋进行处分"的承诺条款(重点看"出租方权属声明"字段) + + 2. 是否约定了产权纠纷时的责任承担 + + 3. 是否说明了权属证明(房产证、不动产权证、经济联合社证明等) + + 4. 对商业租赁,是否涉及必要的经营许可资质 + + + 注意:评判主要依据"出租方权属声明"字段。若该字段有明确的处分权承诺内容,判 pass 或 warn; + + 若该字段为空或仅有模糊表述(如"双方协商一致"),判 fail。 + + + 法规依据:民法典§505 + + ' + messages: + pass: 出租方处分权已明示 + fail: 缺少出租方处分权说明 + references_laws: + - 《民法典》第五百零五条 + type: ai_rule + - rule_id: MM-LEASE-029 + name: 签署方详细信息校验 + risk: medium + score: 3 + stages: + - id: '1' + check: required + field: 出租方 + - id: '2' + check: required + field: 承租方 + - id: '3' + check: required + field: 出租方地址 + - id: '4' + check: required + field: 承租方地址 + logic: 1 AND 2 AND 3 AND 4 + messages: + pass: 签署方详细信息完整 + fail: 签署方详细信息有缺失 + type: deterministic +- group: 标的物与租期 + rules: + - rule_id: MM-LEASE-003 + name: 租赁标的明确 + risk: high + score: 5 + stages: + - id: '1' + check: ai + prompt: '请检查租赁合同中租赁标的信息是否明确。 + + + 租赁物描述:{{租赁物描述}} + + 租赁用途:{{租赁用途}} + + + 评查要点: + + 1. 是否明确了租赁物的名称(房屋、办公场所、店铺等) + + 2. 是否明确了租赁物的具体位置/地址 + + 3. 是否明确了租赁物的面积/规格 + + 4. 是否明确了租赁用途(居住、办公、商用等) + + 5. 租赁用途应当合法且与租赁物性质相符 + + + 法规依据:民法典§703、§704 + + ' + messages: + pass: 租赁标的信息明确 + fail: 租赁标的信息不明确或不完整 + references_laws: + - 《民法典》第七百零三条 + - 《民法典》第七百零四条 + type: ai_rule + - rule_id: MM-LEASE-004 + name: 租赁期限合规 + risk: high + score: 5 + stages: + - id: '1' + check: required + field: 租赁起始日期 + - id: '2' + check: required + field: 租赁结束日期 + - id: '3' + check: ai + prompt: '请检查租赁合同的租赁期限是否合规。 + + + 起始日期:{{租赁起始日期}} + + 结束日期:{{租赁结束日期}} + + 退租返还条款(含续租约定):{{退租返还条款}} + + + 评查要点: + + 1. 起止日期是否明确 + + 2. 租赁期限是否超过二十年(超过二十年的部分无效) + + 3. 租赁期限六个月以上的应当采用书面形式(本合同为书面) + + 4. 如有续租约定,续租后累计期限是否可能超过二十年 + + + 法规依据:民法典§705、§707 + + ' + logic: 1 AND 2 AND 3 + messages: + pass: 租赁期限明确且合规 + fail: 租赁期限缺失或超过法定上限 + references_laws: + - 《民法典》第七百零五条 + - 《民法典》第七百零七条 + type: ai_rule + - rule_id: MM-LEASE-007 + name: 合同地点具体准确 + risk: medium + score: 5 + stages: + - id: '1' + check: ai + prompt: '请检查合同地点信息是否具体准确。 + + + 履行地点(租赁房屋位置):{{履行地点}} + + 签约地点:{{签约地点}} + + 出租方地址:{{出租方地址}} + + 承租方地址:{{承租方地址}} + + + 评查要点: + + 1. 租赁房屋的坐落地点是否具体(到具体门牌号/楼层) + + 2. 签约地点是否明确 + + 3. 双方地址是否完整可供送达 + + + 法规依据:民法典§470 + + ' + messages: + pass: 合同地点信息具体准确 + fail: 合同地点信息不具体或缺失 + references_laws: + - 《民法典》第四百七十条 + type: ai_rule + - rule_id: MM-LEASE-008 + name: 履行方式具体准确 + risk: medium + score: 3 + stages: + - id: '1' + check: ai + prompt: '请检查合同履行方式是否具体准确。 + + + 交付方式:{{交付方式}} + + 租赁用途:{{租赁用途}} + + + 评查要点: + + 1. 房屋交付时间和条件是否明确 + + 2. 是否约定了钥匙、设施设备的移交 + + 3. 交付状态(空房/带装修/带家具等)是否明确 + + 4. 验收或确认程序是否约定 + + + 法规依据:民法典§708、§709 + + ' + messages: + pass: 履行方式具体明确 + fail: 履行方式不具体或缺失 + references_laws: + - 《民法典》第七百零八条 + - 《民法典》第七百零九条 + type: ai_rule + - rule_id: MM-LEASE-024 + name: 标的内容合法 + risk: high + score: 3 + stages: + - id: '1' + check: ai + prompt: '请检查租赁标的内容是否合法。 + + + 租赁物描述:{{租赁物描述}} + + 租赁用途:{{租赁用途}} + + + 评查要点: + + 1. 租赁物不违反法律、行政法规的强制性规定(如不得租赁违章建筑、查封财产等) + + 2. 租赁用途不违反法律法规(如不得用于违法经营、危险品仓储等超出建筑设计用途的使用) + + 3. 如涉及特殊用途(如商用、经营),是否具备相应资质或许可 + + 4. 不违背公序良俗 + + + 法规依据:民法典§153、§154 + + ' + messages: + pass: 租赁标的内容合法 + fail: 租赁标的内容存在违法情形 + references_laws: + - 《民法典》第一百五十三条 + - 《民法典》第一百五十四条 + type: ai_rule +- group: 租金与支付 + rules: + - rule_id: MM-LEASE-005 + name: 租金金额完整 + risk: high + score: 3 + stages: + - id: '1' + check: required + field: 租金金额 + - id: '2' + check: required + field: 租金金额大写 + - id: '3' + check: required + field: 租金计算周期 + - id: '4' + check: amount_match + number: 租金金额 + chinese: 租金金额大写 + logic: 1 AND 2 AND 3 AND 4 + messages: + pass: 租金金额完整且大小写一致 + fail: 租金金额缺失或大小写不一致 + references_laws: + - 《民法典》第四百七十条 + type: deterministic + - rule_id: MM-LEASE-006 + name: 租金及支付方式完整 + risk: high + score: 5 + stages: + - id: '1' + check: required + field: 租金支付方式 + - id: '2' + check: ai + prompt: '请检查租金支付方式是否完整。 + + + 租金支付方式:{{租金支付方式}} + + 收款方开户银行:{{收款方开户银行}} + + 收款方银行账号:{{收款方银行账号}} + + + 评查要点: + + 1. 支付方式是否明确(银行转账、现金等) + + 2. 支付周期是否明确(月付、季付、年付、一次性等) + + 3. 是否约定了逾期支付的后果(滞纳金、解除权等) + + 4. 付款账户信息是否完整(开户行、账号、户名) + + + 法规依据:民法典§721、§722 + + ' + logic: 1 AND 2 + messages: + pass: 租金支付方式约定完整 + fail: 租金支付方式约定不完整 + references_laws: + - 《民法典》第七百二十一条 + - 《民法典》第七百二十二条 + type: ai_rule + - rule_id: MM-LEASE-027 + name: 税务信息完整性 + risk: medium + score: 1 + stages: + - id: '1' + check: ai + prompt: '请检查税务信息是否完整。 + + + 租金支付方式:{{租金支付方式}} + + 租金是否含税:{{租金是否含税}} + + + 评查要点: + + 1. 是否明确了租金是否含税(含税一口价或另行约定税费分担) + + 2. 如租金含税,是否约定由谁开具发票 + + 3. 如租金不含税,是否约定税费承担方 + + + 法规依据:民法典§470 + + ' + messages: + pass: 税务信息完整 + fail: 税务信息不完整 + references_laws: + - 《民法典》第四百七十条 + type: ai_rule + - rule_id: MM-LEASE-030 + name: 银行账户信息完整性 + risk: medium + score: 2 + stages: + - id: '1' + check: required + field: 收款方开户银行 + - id: '2' + check: required + field: 收款方银行账号 + - id: '3' + check: required + field: 收款方账户名称 + logic: 1 AND 2 AND 3 + messages: + pass: 收款方银行账户信息完整 + fail: 收款方银行账户信息不完整 + references_laws: + - 《民法典》第四百七十条 + type: deterministic + - rule_id: MM-LEASE-034 + name: 押金/保证金条款 + risk: medium + score: 2 + activate_if: 约定押金 == '是' + stages: + - id: '1' + check: ai + prompt: '请检查押金/保证金条款是否完整(合同约定押金时)。 + + + 租金支付方式:{{租金支付方式}} + + 退租返还条款:{{退租返还条款}} + + + 评查要点: + + 1. 押金金额是否明确 + + 2. 押金退还的条件是否明确(租赁期满、租赁物完好交还等) + + 3. 押金退还的时间是否明确 + + 4. 是否约定了押金可扣减的情形(欠缴租金、损坏赔偿等) + + 5. 押金金额是否合理(一般为 1-3 个月租金) + + + 法规依据:民法典§586、§587 + + ' + messages: + pass: 押金条款完整 + fail: 押金条款要素不全 + references_laws: + - 《民法典》第五百八十六条 + - 《民法典》第五百八十七条 + type: ai_rule +- group: 使用与费用 + rules: + - rule_id: MM-LEASE-009 + name: 维修责任约定 + risk: medium + score: 3 + stages: + - id: '1' + check: required + field: 维修责任条款 + - id: '2' + check: ai + prompt: '请检查维修责任条款是否明确。 + + + 维修责任条款:{{维修责任条款}} + + + 评查要点: + + 1. 是否明确了出租方的维修义务范围(主体结构、设施设备等) + + 2. 是否明确了承租方的维修义务范围(日常维护、合理使用等) + + 3. 维修费用的承担方是否明确 + + 4. 是否约定维修期间的租金处理(如长期维修时租金减免) + + 5. 因承租方过错导致损坏的维修责任是否明确 + + + 法规依据:民法典§712、§713 + + ' + logic: 1 AND 2 + messages: + pass: 维修责任约定明确 + fail: 维修责任缺失或不明确 + references_laws: + - 《民法典》第七百一十二条 + - 《民法典》第七百一十三条 + type: ai_rule + - rule_id: MM-LEASE-010 + name: 转租条款 + risk: medium + score: 2 + stages: + - id: '1' + check: required + field: 转租条款 + - id: '2' + check: ai + prompt: '请检查转租条款是否明确。 + + + 转租条款:{{转租条款}} + + + 评查要点: + + 1. 是否明确约定了是否允许转租 + + 2. 如允许转租,是否约定了转租的条件和程序(如需经出租方书面同意) + + 3. 如禁止转租,是否明确了违反禁止转租的后果 + + 4. 是否约定了转租后的责任承担 + + + 法规依据:民法典§716、§717、§718 + + ' + logic: 1 AND 2 + messages: + pass: 转租条款约定明确 + fail: 转租条款缺失或不明确 + references_laws: + - 《民法典》第七百一十六条 + - 《民法典》第七百一十七条 + - 《民法典》第七百一十八条 + type: ai_rule + - rule_id: MM-LEASE-011 + name: 租赁物返还与退租 + risk: medium + score: 3 + stages: + - id: '1' + check: required + field: 退租返还条款 + - id: '2' + check: ai + prompt: '请检查退租和返还条款是否完整。 + + + 退租返还条款:{{退租返还条款}} + + + 评查要点: + + 1. 是否约定了租赁物返还的条件和时间 + + 2. 是否约定了返还时租赁物应处的状态(恢复原状、正常损耗等) + + 3. 是否约定了承租方的优先承租权(房屋租赁中法定享有) + + 4. 是否约定了提前退租的条件和违约责任 + + 5. 是否约定了租赁物返还时的交接验收程序 + + + 法规依据:民法典§733、§734 + + ' + logic: 1 AND 2 + messages: + pass: 退租及返还条款完整 + fail: 退租及返还条款不完整 + references_laws: + - 《民法典》第七百三十三条 + - 《民法典》第七百三十四条 + type: ai_rule +- group: 违约与争议 + rules: + - rule_id: MM-LEASE-012 + name: 违约责任形式明确 + risk: high + score: 5 + stages: + - id: '1' + check: required + field: 违约责任条款 + - id: '2' + check: ai + prompt: '请检查违约责任条款是否形式明确。 + + + 违约责任条款:{{违约责任条款}} + + + 评查要点: + + 1. 是否明确了违约方和违约情形 + + 2. 责任形式是否具体(支付违约金、赔偿损失、继续履行等) + + 3. 是否覆盖双方(出租方违约和承租方违约均有约定) + + 4. 是否有兜底条款(如未尽事宜如何处理) + + + 法规依据:民法典§577 + + ' + logic: 1 AND 2 + messages: + pass: 违约责任形式明确 + fail: 违约责任形式不明确或缺失 + references_laws: + - 《民法典》第五百七十七条 + type: ai_rule + - rule_id: MM-LEASE-013 + name: 违约金条款完整合理 + risk: high + score: 7 + stages: + - id: '1' + check: required + field: 违约金金额 + - id: '2' + check: ai + prompt: '请检查违约金条款是否完整合理。 + + + 违约金金额:{{违约金金额}} + + 违约金计算方式:{{违约金计算方式}} + + 违约责任条款:{{违约责任条款}} + + 租金金额:{{租金金额}} + + + 评查要点: + + 1. 违约金金额或计算方式是否明确 + + 2. 违约金标准是否合理(约定过高可依法调整,一般不超过造成损失的 30%) + + 3. 是否约定了逾期支付租金的违约金 + + 4. 是否覆盖双方违约情形 + + + 法规依据:民法典§585 + + ' + logic: 1 AND 2 + messages: + pass: 违约金条款完整合理 + fail: 违约金条款不完整或标准不合理 + references_laws: + - 《民法典》第五百八十五条 + type: ai_rule + - rule_id: MM-LEASE-014 + name: 争议解决方式明确 + risk: high + score: 4 + stages: + - id: '1' + check: required + field: 争议解决条款 + - id: '2' + check: ai + prompt: '请检查争议解决方式是否明确。 + + + 争议解决条款:{{争议解决条款}} + + 管辖机构:{{管辖机构}} + + + 评查要点: + + 1. 是否明确了争议解决方式(协商/诉讼/仲裁,只能择一作为最终方式) + + 2. 不能同时约定仲裁和诉讼(互斥) + + 3. 如约定诉讼,是否指定了具体的管辖法院 + + 4. 如约定仲裁,是否指定了具体的仲裁机构 + + + 法规依据:民法典§470 + + ' + logic: 1 AND 2 + messages: + pass: 争议解决方式明确 + fail: 争议解决方式不明确或约定冲突 + references_laws: + - 《民法典》第四百七十条 + type: ai_rule + - rule_id: MM-LEASE-015 + name: 管辖机构名称准确 + risk: medium + score: 3 + stages: + - id: '1' + check: ai + prompt: '请检查管辖机构名称是否准确。 + + + 管辖机构:{{管辖机构}} + + 争议解决条款:{{争议解决条款}} + + + 评查要点: + + 1. 如约定诉讼,法院名称是否准确规范(如"XX市XX区人民法院",而非简称) + + 2. 如约定仲裁,仲裁机构名称是否准确(如"中国国际经济贸易仲裁委员会") + + 3. 指定的机构是否对本合同争议有管辖权 + + 4. 名称不应模糊(如仅写"当地法院"是不合格的) + + + 法规依据:民法典§470 + + ' + messages: + pass: 管辖机构名称准确 + fail: 管辖机构名称不准确或模糊 + references_laws: + - 《民法典》第四百七十条 + type: ai_rule + - rule_id: MM-LEASE-016 + name: 不可抗力条款完整性 + risk: medium + score: 3 + stages: + - id: '1' + check: required + field: 不可抗力条款 + - id: '2' + check: ai + prompt: '请检查不可抗力条款是否完整(三要素)。 + + + 不可抗力条款:{{不可抗力条款}} + + + 评查要点(三要素): + + 1. 是否明确了不可抗力的定义/类型范围 + + 2. 是否约定了通知义务和通知时限 + + 3. 是否约定了免责后果和合同处理方式(如延期履行、解除合同等) + + + 法规依据:民法典§180、§590 + + ' + logic: 1 AND 2 + messages: + pass: 不可抗力条款完整 + fail: 不可抗力条款缺失或要素不全 + references_laws: + - 《民法典》第一百八十条 + - 《民法典》第五百九十条 + type: ai_rule + - rule_id: MM-LEASE-017 + name: 变更解除终止条款完整性 + risk: high + score: 5 + stages: + - id: '1' + check: ai + prompt: '请检查变更、解除、终止条款是否完整。 + + + 变更解除终止条款:{{变更解除终止条款}} + + + 评查要点: + + 1. 是否约定了合同变更的条件和程序 + + 2. 是否约定了合同解除/终止的条件(法定解除、约定解除、协商解除) + + 3. 是否约定了终止通知期限 + + 4. 是否有对己方(采购/承租方)的保护条款 + + 5. 是否约定了合同终止后的处理(结算、返还等) + + + 法规依据:民法典§543、§562、§563 + + ' + messages: + pass: 变更解除终止条款完整 + fail: 变更解除终止条款不完整 + references_laws: + - 《民法典》第五百四十三条 + - 《民法典》第五百六十二条 + - 《民法典》第五百六十三条 + type: ai_rule +- group: 附件与特征分类 + rules: + - rule_id: MM-LEASE-019 + name: 附件条款完整性 + risk: low + score: 2 + stages: + - id: '1' + check: ai + prompt: '请检查附件条款是否具备基本形式要素。 + + + 附件列表:{{附件列表}} + + + 评查要点(满足任一核心要素即可 pass,多缺给 warn,全缺给 fail): + + 1. 【核心】至少列明了附件的名称(如"屋内资产清单""权属证明""家私家电清单"等) + + 2. 【加分】附件有序号标识(如"附件一"、"附件1") + + 3. 【加分】附件与合同正文有引用或关联说明 + + 4. 【加分】有"附件与合同具有同等法律效力"的声明 + + + 注意:租赁合同中附件本身是可选的辅助材料,只要名称清晰就视为合格; + + 只有完全缺失附件名称或无任何可识别附件信息时才判 fail。 + + + 法规依据:民法典§470 + + ' + messages: + pass: 附件条款已列明 + fail: 附件条款完全缺失 + references_laws: + - 《民法典》第四百七十条 + type: ai_rule + - rule_id: MM-LEASE-020 + name: 补充协议条款完整性 + risk: medium + score: 2 + stages: + - id: '1' + check: required + field: 补充协议条款 + messages: + pass: 补充协议条款存在 + fail: 缺少补充协议兜底条款 + references_laws: + - 《民法典》第五百四十三条 + type: deterministic + - rule_id: MM-LEASE-033 + name: 保密条款完整性 + risk: medium + score: 2 + activate_if: 涉及保密信息 == '是' + stages: + - id: '1' + check: ai + prompt: '请检查保密条款是否完整(合同涉及保密信息时)。 + + + 租赁物描述:{{租赁物描述}} + + 租赁用途:{{租赁用途}} + + + 评查要点(三要素): + + 1. 是否明确了保密信息的范围(商业秘密、技术秘密、个人信息等) + + 2. 是否约定了保密期限 + + 3. 是否约定了违反保密义务的违约责任 + + + 法规依据:民法典§501 + + ' + messages: + pass: 保密条款完整 + fail: 保密条款要素不全 + references_laws: + - 《民法典》第五百零一条 + type: ai_rule diff --git a/rules/contract_sale/rules.yaml b/rules/contract_sale/rules.yaml index 870c2a6..846d1f4 100644 --- a/rules/contract_sale/rules.yaml +++ b/rules/contract_sale/rules.yaml @@ -1,1020 +1,963 @@ metadata: type_id: contract.sale name: 通用买卖合同 - version: '2.1' - last_updated: '2026-04-12' - tags: - - 合同 - - 买卖 - - 采购 - - 通用 - description: '依据《中华人民共和国民法典》合同编·通则(第470条)及买卖合同章(第595-647条)。 - + version: "2.1" + last_updated: "2026-04-12" + description: | + 依据《中华人民共和国民法典》合同编·通则(第470条)及买卖合同章(第595-647条)。 适用于一般货物/商品/设备/IT系统采购类买卖合同的评查。 - 原始规则来源:旧系统 01_买卖合同.json(10条买卖专项评查点)+ 通用合同评查点。 + tags: [合同, 买卖, 采购, 通用] + +# ───────────────────────────────────────────────────────────────── +# 字段抽取声明 +# required_from: 该字段从哪个阶段开始必需 +# draft → 起草阶段就必需(草稿没有也会被标记) +# executed → 仅已执行阶段必需(草稿可以缺失) +# 未声明 → 默认 executed +# ───────────────────────────────────────────────────────────────── - ' extract: -- group: 合同成立要素 - fields: - - name: 合同名称 - type: verbatim - required_from: draft - desc: 合同的完整名称/项目名称 - deep_retry: false - - name: 甲方 - type: verbatim - required_from: draft - desc: 买方/采购方公司全称 - deep_retry: false - - name: 乙方 - type: verbatim - required_from: draft - desc: 卖方/供应商公司全称 - deep_retry: false - - name: 合同标的描述 - type: string - required_from: draft - desc: 合同交易的标的物/服务内容概述 - deep_retry: false - - name: 合同金额 - type: money - required_from: draft - desc: 合同总金额(数字) - deep_retry: true - - name: 合同金额大写 - type: verbatim - required_from: draft - desc: 合同总金额中文大写 - deep_retry: true -- group: 主体资格 - fields: - - name: 甲方法定代表人 - type: verbatim - required_from: draft - desc: 甲方法定代表人姓名 - deep_retry: false - - name: 乙方法定代表人 - type: verbatim - required_from: draft - desc: 乙方法定代表人姓名 - deep_retry: false - - name: 甲方地址 - type: verbatim - required_from: draft - desc: 甲方注册/办公地址 - deep_retry: false - - name: 乙方地址 - type: verbatim - required_from: draft - desc: 乙方注册/办公地址 - deep_retry: false - - name: 甲方统一社会信用代码 - type: uscc - required_from: executed - desc: 甲方18位统一社会信用代码 - deep_retry: false - - name: 乙方统一社会信用代码 - type: uscc - required_from: executed - desc: 乙方18位统一社会信用代码 - deep_retry: false -- group: 履约核心条款 - fields: - - name: 付款方式 - type: string - required_from: draft - desc: 付款条件、比例、节点、方式的完整描述 - deep_retry: false - - name: 交货期限 - type: string - required_from: draft - desc: 交货/交付时间要求 - deep_retry: false - - name: 交货地点 - type: verbatim - required_from: draft - desc: 交货/送达地点 - deep_retry: false - - name: 验收条款 - type: string - required_from: draft - desc: 验收标准、验收流程、初验终验时间和不合格处理 - deep_retry: false - - name: 质保期条款 - type: string - required_from: draft - desc: 质保期限、质保范围、故障响应时间和运维服务内容 - deep_retry: false -- group: 买卖合同特有条款 - fields: - - name: 风险转移条款 - type: string - required_from: draft - desc: 标的物风险转移时点和交付确认方式 - deep_retry: false - - name: 履约保证金条款 - type: string - required_from: draft - desc: 保证金金额、缴纳方式、缴纳时间和退还条件 - deep_retry: false - - name: 知识产权条款 - type: string - required_from: draft - desc: 知识产权归属、使用许可范围和侵权责任 - deep_retry: false - - name: 培训条款 - type: string - required_from: draft - desc: 培训内容、培训方式和培训安排 - deep_retry: false - - name: 标的清单明细 - type: string - required_from: draft - desc: 标的清单(序号、名称、数量、单价等明细及总价) - deep_retry: false - - name: 招投标信息 - type: string - required_from: draft - desc: 招标文件编号、项目编号、中标通知书等招投标依据 - deep_retry: false -- group: 法定/必备条款 - fields: - - name: 违约责任条款 - type: string - required_from: draft - desc: 违约责任的完整条款内容 - deep_retry: false - - name: 争议解决条款 - type: string - required_from: draft - desc: 争议解决方式(法院/仲裁)的完整描述 - deep_retry: false - - name: 不可抗力条款 - type: string - required_from: draft - desc: 不可抗力相关条款的完整内容 - deep_retry: false -- group: 签署要素 - fields: - - name: 签约日期 - type: date - required_from: executed - desc: 合同签订日期 - deep_retry: false - - name: 合同编号 - type: verbatim - required_from: executed - desc: 合同唯一编号 - deep_retry: false -- group: 辅助信息 - fields: - - name: 甲方联系人 - type: verbatim - required_from: draft - desc: 甲方项目联系人姓名 - deep_retry: false - - name: 甲方联系电话 - type: verbatim - required_from: draft - desc: 甲方联系电话 - deep_retry: false - - name: 乙方联系人 - type: verbatim - required_from: draft - desc: 乙方项目联系人姓名 - deep_retry: false - - name: 乙方联系电话 - type: verbatim - required_from: draft - desc: 乙方联系电话 - deep_retry: false - - name: 收款方开户银行 - type: verbatim - required_from: draft - desc: 收款方(通常为供应商/卖方/乙方)的银行开户行名称 - deep_retry: false - - name: 收款方银行账号 - type: verbatim - required_from: draft - desc: 收款方的银行账号 - deep_retry: false -- group: 其他条款 - fields: - - name: 保密条款 - type: string - required_from: draft - desc: 保密义务相关条款内容,如果有保密条款附件,总结附件的内容,限制在100字内 - deep_retry: false -- group: 判定原则:只有合同中明确出现相关条款时才填"是",没有提及就填"否"。不要推测。 - fields: - - name: 涉及知识产权 - type: - - 是 - - 否 - required_from: draft - allowed: - - 是 - - 否 - desc: '合同中是否存在知识产权相关条款(如知识产权归属、授权许可、源代码交付、专利使用等)。 填"是"的条件:合同正文中明确出现"知识产权""版权""专利""著作权""源代码"等关键词且有实质条款。 填"否"的条件:合同为普通货物采购(设备、物资、服装、食品、原材料等)且无任何知识产权条款。 + # ── 合同成立要素 ── + - {name: 合同名称, type: verbatim, required_from: draft, description: 合同的完整名称/项目名称} + - {name: 甲方, type: verbatim, required_from: draft, description: 买方/采购方公司全称} + - {name: 乙方, type: verbatim, required_from: draft, description: 卖方/供应商公司全称} + - {name: 合同标的描述, type: string, required_from: draft, description: 合同交易的标的物/服务内容概述} + - {name: 合同金额, type: money, required_from: draft, description: 合同总金额(数字)。框架/年度采购合同无固定总价时填 0 或 null} + - {name: 合同金额大写, type: verbatim, required_from: draft, description: 合同总金额中文大写} - ' - deep_retry: false - - name: 涉及保密信息 - type: - - 是 - - 否 - required_from: draft - allowed: - - 是 - - 否 - desc: '合同中是否存在保密条款(如保密义务、保密期限、泄密责任等)。 填"是"的条件:合同正文中明确出现"保密""机密""不得泄露"等关键词且有实质保密条款。 填"否"的条件:合同中没有任何保密相关条款。 + # ── 主体资格 ── + - {name: 甲方法定代表人, type: verbatim, required_from: draft, description: 甲方法定代表人姓名} + - {name: 乙方法定代表人, type: verbatim, required_from: draft, description: 乙方法定代表人姓名} + - {name: 甲方地址, type: verbatim, required_from: draft, description: 甲方注册/办公地址} + - {name: 乙方地址, type: verbatim, required_from: draft, description: 乙方注册/办公地址} + - {name: 甲方统一社会信用代码, type: uscc, required_from: executed, description: 甲方18位统一社会信用代码} + - {name: 乙方统一社会信用代码, type: uscc, required_from: executed, description: 乙方18位统一社会信用代码} - ' - deep_retry: false - - name: 涉及培训服务 - type: - - 是 - - 否 - required_from: draft - allowed: - - 是 - - 否 - desc: '合同中是否包含培训服务条款(如培训内容、培训人数、培训地点等)。 填"是"的条件:合同正文中明确约定了培训相关的服务内容和安排。 填"否"的条件:合同为纯货物采购,没有任何培训条款。 + # ── 履约核心条款 ── + - {name: 付款方式, type: string, required_from: draft, description: 付款条件、比例、节点、方式的完整描述} + - {name: 交货期限, type: string, required_from: draft, description: 交货/交付时间要求} + - {name: 交货地点, type: verbatim, required_from: draft, description: 交货/送达地点} + - {name: 验收条款, type: string, required_from: draft, description: 验收标准、验收流程、初验终验时间和不合格处理} + - {name: 质保期条款, type: string, description: 质保期限、质保范围、故障响应时间和运维服务内容} + + # ── 买卖合同特有条款 ── + - {name: 风险转移条款, type: string, description: 标的物风险转移时点和交付确认方式} + - {name: 履约保证金条款, type: string, description: 保证金金额、缴纳方式、缴纳时间和退还条件} + - {name: 知识产权条款, type: string, description: 知识产权归属、使用许可范围和侵权责任} + - {name: 培训条款, type: string, description: 培训内容、培训方式和培训安排} + - {name: 标的清单明细, type: string, description: 标的清单(序号、名称、数量、单价等明细及总价)} + - {name: 招投标信息, type: string, description: 招标文件编号、项目编号、中标通知书等招投标依据} + + # ── 法定/必备条款 ── + - {name: 违约责任条款, type: string, required_from: draft, description: 违约责任的完整条款内容} + - {name: 争议解决条款, type: string, required_from: draft, description: 争议解决方式(法院/仲裁)的完整描述} + - {name: 不可抗力条款, type: string, description: 不可抗力相关条款的完整内容} + + # ── 签署要素 ── + - {name: 签约日期, type: date, required_from: executed, description: 合同签订日期} + - {name: 合同编号, type: verbatim, required_from: executed, description: 合同唯一编号} + + # ── 辅助信息 ── + - {name: 甲方联系人, type: verbatim, description: 甲方项目联系人姓名} + - {name: 甲方联系电话, type: verbatim, description: 甲方联系电话} + - {name: 乙方联系人, type: verbatim, description: 乙方项目联系人姓名} + - {name: 乙方联系电话, type: verbatim, description: 乙方联系电话} + - {name: 甲方开户银行, type: verbatim, description: 甲方银行开户行名称} + - {name: 甲方银行账号, type: verbatim, description: 甲方银行账号} + + # ── 其他条款 ── + - {name: 保密条款, type: string, description: 保密义务相关条款内容,如有附件总结内容限制在100字内} + +# ───────────────────────────────────────────────────────────────── +# 规则列表 +# ───────────────────────────────────────────────────────────────── - ' - deep_retry: false rules: -- group: 完整性(11 条) - rules: - - rule_id: MM-001 + + # ═══════════════════════════════════════════════════════════ + # MM-SALE-001 · 合同主体齐全 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-001 name: 合同主体齐全 risk: high - score: 10 + score: 7 + stages: - - id: '1' - check: required - field: 甲方 - - id: '2' - check: required - field: 乙方 + - id: "1" + check: required + field: 甲方 + - id: "2" + check: required + field: 乙方 + + logic: "1 AND 2" + messages: pass: 甲乙方信息完整 fail: 缺少甲方或乙方信息 - type: deterministic - - rule_id: MM-002 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-002 · 标的物与金额必填 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-002 name: 标的物与金额必填 risk: high - score: 10 + score: 7 + stages: - - id: '1' - check: required - field: 合同标的描述 - - id: '2' - check: required - field: 合同金额 + - id: "1" + check: required + field: 合同标的描述 + - id: "2" + check: required + field: 合同金额 + + logic: "1 AND 2" + messages: pass: 标的物与金额信息完整 fail: 缺少标的物描述或合同金额 - type: deterministic - - rule_id: MM-003 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-003 · 合同名称必填 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-003 name: 合同名称必填 risk: medium - score: 5 + score: 3 + stages: - - id: '1' - check: required - field: 合同名称 + - id: "1" + check: required + field: 合同名称 + + logic: "1" + messages: pass: 合同名称已填写 fail: 缺少合同名称 - type: deterministic - - rule_id: MM-004 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-004 · 法定代表人齐全 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-004 name: 法定代表人齐全 risk: medium - score: 5 + score: 3 + stages: - - id: '1' - check: required - field: 甲方法定代表人 - - id: '2' - check: required - field: 乙方法定代表人 + - id: "1" + check: required + field: 甲方法定代表人 + - id: "2" + check: required + field: 乙方法定代表人 + + logic: "1 AND 2" + messages: pass: 甲乙方法定代表人信息完整 fail: 缺少甲方或乙方法定代表人信息 - type: deterministic - - rule_id: MM-005 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-005 · 交货期限必填 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-005 name: 交货期限必填 risk: high - score: 8 + score: 6 + stages: - - id: '1' - check: required - field: 交货期限 + - id: "1" + check: required + field: 交货期限 + + logic: "1" + messages: pass: 交货期限已约定 fail: 交货期限未约定 - type: deterministic - - rule_id: MM-006 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-006 · 验收条款存在 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-006 name: 验收条款存在 risk: high - score: 8 + score: 5 + stages: - - id: '1' - check: required - field: 验收条款 + - id: "1" + check: required + field: 验收条款 + + logic: "1" + messages: pass: 验收条款存在 fail: 缺少验收条款 - type: deterministic - - rule_id: MM-007 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-007 · 违约责任条款存在 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-007 name: 违约责任条款存在 risk: high - score: 8 + score: 6 + stages: - - id: '1' - check: required - field: 违约责任条款 + - id: "1" + check: required + field: 违约责任条款 + + logic: "1" + messages: pass: 违约责任条款存在 fail: 缺少违约责任条款 - type: deterministic - - rule_id: MM-008 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-008 · 争议解决条款存在 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-008 name: 争议解决条款存在 risk: medium - score: 5 + score: 3 + stages: - - id: '1' - check: required - field: 争议解决条款 + - id: "1" + check: required + field: 争议解决条款 + + logic: "1" + messages: pass: 争议解决条款存在 fail: 缺少争议解决条款 - type: deterministic - - rule_id: MM-009 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-009 · 培训条款存在 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-009 name: 培训条款存在 risk: low - score: 2 - activate_if: 涉及培训服务 == "是" + score: 1 + stages: - - id: '1' - check: required - field: 培训条款 + - id: "1" + check: required + field: 培训条款 + + logic: "1" + messages: pass: 培训条款已约定 fail: 培训条款缺失 - type: deterministic - - rule_id: MM-010 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-010 · 签约日期必填 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-010 name: 签约日期必填 risk: high - score: 8 + score: 5 applies_in: - - executed + - executed + stages: - - id: '1' - check: required - field: 签约日期 + - id: "1" + check: required + field: 签约日期 + + logic: "1" + messages: pass: 签约日期已填写 fail: 缺少签约日期 - type: deterministic - - rule_id: MM-011 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-011 · 合同编号必填 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-011 name: 合同编号必填 risk: medium - score: 3 + score: 1 applies_in: - - executed + - executed + stages: - - id: '1' - check: required - field: 合同编号 + - id: "1" + check: required + field: 合同编号 + + logic: "1" + messages: pass: 合同编号已填写 fail: 缺少合同编号 - type: deterministic -- group: 规范性(2 条) - rules: - - rule_id: MM-012 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-012 · 甲方信用代码校验 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-012 name: 甲方信用代码校验 risk: medium - score: 5 + score: 3 applies_in: - - executed + - executed + stages: - - id: '1' - check: format - field: 甲方统一社会信用代码 - format: uscc + - id: "1" + check: format + field: 甲方统一社会信用代码 + format: uscc + + logic: "1" + messages: pass: 甲方统一社会信用代码校验通过 fail: 甲方统一社会信用代码校验位错误 - type: deterministic - - rule_id: MM-013 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-013 · 乙方信用代码校验 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-013 name: 乙方信用代码校验 risk: medium - score: 5 + score: 3 applies_in: - - executed + - executed + stages: - - id: '1' - check: format - field: 乙方统一社会信用代码 - format: uscc + - id: "1" + check: format + field: 乙方统一社会信用代码 + format: uscc + + logic: "1" + messages: pass: 乙方统一社会信用代码校验通过 fail: 乙方统一社会信用代码校验位错误 - type: deterministic -- group: 合理性(3 条) - rules: - - rule_id: MM-014 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-014 · 金额大小写一致 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-014 name: 金额大小写一致 risk: high - score: 10 + score: 6 + stages: - - id: '1' - check: amount_match - number: 合同金额 - chinese: 合同金额大写 + - id: "1" + check: amount_match + number: 合同金额 + chinese: 合同金额大写 + + logic: "1" + messages: pass: 金额大小写一致 fail: 合同金额数字与大写不一致 - type: deterministic - - rule_id: MM-015 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-015 · 金额为正数 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-015 name: 金额为正数 risk: low - score: 3 + score: 1 + stages: - - id: '1' - check: compare - left: 合同金额 - op: '>' - right: 0 + - id: "1" + check: compare + left: 合同金额 + op: ">" + right: 0 + + logic: "1" + messages: pass: 合同金额为正数 fail: 合同金额不为正数 - type: deterministic - - rule_id: MM-016 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-016 · 签约日期不是未来 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-016 name: 签约日期不是未来 risk: low - score: 3 + score: 1 applies_in: - - executed + - executed + stages: - - id: '1' - check: assert - expr: parse_date(签约日期) != None and (today() - parse_date(签约日期)).days >= 0 and (today() - parse_date(签约日期)).days <= 3650 + - id: "1" + check: assert + expr: "parse_date(签约日期) != None and (today() - parse_date(签约日期)).days >= 0 and (today() - parse_date(签约日期)).days <= 3650" + + logic: "1" + messages: pass: 签约日期在合理范围内 fail: 签约日期为未来日期或距今超过10年 - type: deterministic -- group: '来源: NR-MM-002 标的物检验期限约定 — §620-622' - rules: - - rule_id: MM-017 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-017 · 验收条款完整(标的物检验期限约定) + # 来源: NR-MM-002 · 民法典第620-622条 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-017 name: 验收条款完整 risk: high - score: 5 + score: 3 + stages: - - id: '1' - check: required - field: 验收条款 - - id: '2' - check: ai - prompt: '请检查合同的验收/检验条款是否完整。 + - id: "1" + check: required + field: 验收条款 + - id: "2" + check: ai + prompt: | + 请检查合同的验收/检验条款是否完整。 + 验收条款:{{验收条款}} - 验收条款:{{验收条款}} + 评查要点(依据民法典第620-622条): + 1. 是否约定了明确的检验/验收期限 + 2. 是否约定了验收标准(国家标准、行业标准、招标文件要求等) + 3. 是否约定了验收流程(谁组织、谁参与) + 4. 检验期限是否合理 + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" - 评查要点(依据民法典第620-622条): + logic: "1 AND 2" - 1. 是否约定了明确的检验/验收期限 - - 2. 是否约定了验收标准(国家标准、行业标准、招标文件要求等) - - 3. 是否约定了验收流程(谁组织、谁参与) - - 4. 检验期限是否合理 - - - 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} - - 判断标准: - - - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 - - - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) - - - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) - - ' messages: pass: 验收条款完整 fail: 验收条款不完整 - type: ai_rule -- group: '来源: NR-MM-004 风险转移条款 — §604-607' - rules: - - rule_id: MM-018 + + # 来源: NR-MM-003 交货期限明确性 — §601-602(已被 MM-SALE-005 覆盖) + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-018 · 风险转移条款明确 + # 来源: NR-MM-004 · 民法典第604-607条 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-018 name: 风险转移条款明确 risk: medium - score: 2 + score: 1 + stages: - - id: '1' - check: required - field: 风险转移条款 - - id: '2' - check: ai - prompt: '请检查合同中是否有关于标的物/服务交付后风险转移的约定。 + - id: "1" + check: required + field: 风险转移条款 + - id: "2" + check: ai + prompt: | + 请检查合同中是否有关于标的物/服务交付后风险转移的约定。 + 风险转移条款:{{风险转移条款}} - 风险转移条款:{{风险转移条款}} + 评查要点(依据民法典第604-607条): + 1. 是否明确了风险转移的时点(交付时、验收时或其他约定时点) + 2. 对于软件/系统类标的,风险转移通常与验收挂钩 + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" - 评查要点(依据民法典第604-607条): + logic: "1 AND 2" - 1. 是否明确了风险转移的时点(交付时、验收时或其他约定时点) - - 2. 对于软件/系统类标的,风险转移通常与验收挂钩 - - - 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} - - 判断标准: - - - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 - - - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) - - - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) - - ' messages: pass: 风险转移条款约定明确 fail: 风险转移条款缺失或不明确 - type: ai_rule -- group: '来源: NR-MM-005 质保期条款完整性 — §617, §621' - rules: - - rule_id: MM-019 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-019 · 质保期条款完整 + # 来源: NR-MM-005 · 民法典第617、621条 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-019 name: 质保期条款完整 risk: high score: 3 + stages: - - id: '1' - check: required - field: 质保期条款 - - id: '2' - check: ai - prompt: '请检查合同的质保条款是否完整。 + - id: "1" + check: required + field: 质保期条款 + - id: "2" + check: ai + prompt: | + 请检查合同的质保条款是否完整。 + 质保条款:{{质保期条款}} - 质保条款:{{质保期条款}} + 评查要点(依据民法典第617、621条): + 1. 质保期限是否明确(起算时间、结束时间) + 2. 质保范围是否清晰(哪些属于质保范围内、哪些除外) + 3. 故障响应时间是否合理 + 4. 是否约定了质保期内的服务标准 + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" - 评查要点(依据民法典第617、621条): + logic: "1 AND 2" - 1. 质保期限是否明确(起算时间、结束时间) - - 2. 质保范围是否清晰(哪些属于质保范围内、哪些除外) - - 3. 故障响应时间是否合理 - - 4. 是否约定了质保期内的服务标准 - - - 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} - - 判断标准: - - - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 - - - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) - - - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) - - ' messages: pass: 质保期条款完整 fail: 质保期条款不完整 - type: ai_rule -- group: '来源: NR-MM-006 履约保证金条款 — §586-587' - rules: - - rule_id: MM-020 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-020 · 履约保证金条款完整 + # 来源: NR-MM-006 · 民法典第586-587条 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-020 name: 履约保证金条款完整 risk: medium score: 3 - activate_if: 履约保证金条款 != None + stages: - - id: '1' - check: required - field: 履约保证金条款 - - id: '2' - check: ai - prompt: '请检查合同中履约保证金条款是否完整。 + - id: "1" + check: required + field: 履约保证金条款 + - id: "2" + check: ai + prompt: | + 请检查合同中履约保证金条款是否完整。 + 保证金条款:{{履约保证金条款}} - 保证金条款:{{履约保证金条款}} + 评查要点(依据民法典第586-587条): + 1. 保证金金额是否明确 + 2. 缴纳时间和方式是否清楚 + 3. 退还条件是否合理、具体 + 4. 退还时间是否明确 + 5. 保证金比例一般不超过合同金额的10% + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" - 评查要点(依据民法典第586-587条): + logic: "1 AND 2" - 1. 保证金金额是否明确 - - 2. 缴纳时间和方式是否清楚 - - 3. 退还条件是否合理、具体 - - 4. 退还时间是否明确 - - 5. 保证金比例一般不超过合同金额的10% - - - 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} - - 判断标准: - - - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 - - - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) - - - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) - - ' messages: pass: 履约保证金条款完整 fail: 履约保证金条款不完整 - type: ai_rule -- group: '来源: NR-MM-009 分期付款条款合理性 — §626-634' - rules: - - rule_id: MM-021 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-021 · 分期付款条款合理 + # 来源: NR-MM-009 · 民法典第626-634条 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-021 name: 分期付款条款合理 risk: high - score: 5 + score: 4 + stages: - - id: '1' - check: required - field: 付款方式 - - id: '2' - check: required - field: 合同金额 - - id: '3' - check: ai - prompt: '请审查合同分期付款条款的合理性。 + - id: "1" + check: required + field: 付款方式 + - id: "2" + check: required + field: 合同金额 + - id: "3" + check: ai + prompt: | + 请审查合同分期付款条款的合理性。 + 付款条款:{{付款方式}} + 合同总金额:{{合同金额}} + 联合采购信息:{{联合采购信息}} - 付款条款:{{付款方式}} + 评查要点(依据民法典第626-634条): + 1. 各期付款比例之和是否覆盖应付总额(联合采购时:各期比例之和=本单位分摊比例即为100%覆盖,如4单位各付25%,则5%+10%+10%=25%=该单位全额,判为pass) + 2. 预付款不超过30% + 3. 付款节点与交付验收挂钩 + 4. 有付款前置条件(发票、验收报告等) + 请简洁回答,reason不超过100字。 - 合同总金额:{{合同金额}} + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" - 联合采购信息:{{联合采购信息}} + logic: "1 AND 2 AND 3" - - 评查要点(依据民法典第626-634条): - - 1. 各期付款比例之和是否覆盖应付总额(联合采购时:各期比例之和=本单位分摊比例即为100%覆盖,如4单位各付25%,则5%+10%+10%=25%=该单位全额,判为pass) - - 2. 预付款不超过30% - - 3. 付款节点与交付验收挂钩 - - 4. 有付款前置条件(发票、验收报告等) - - 请简洁回答,reason不超过100字。 - - - 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} - - 判断标准: - - - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 - - - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) - - - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) - - ' messages: pass: 分期付款条款合理 fail: 分期付款条款存在问题 - type: ai_rule -- group: '来源: NR-MM-007 知识产权归属约定 — §600' - rules: - - rule_id: MM-022 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-022 · 知识产权条款完整 + # 来源: NR-MM-007 · 民法典第600条 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-022 name: 知识产权条款完整 risk: high score: 3 - activate_if: 涉及知识产权 == "是" + stages: - - id: '1' - check: required - field: 知识产权条款 - - id: '2' - check: ai - prompt: '请检查合同中知识产权条款是否完整。 + - id: "1" + check: required + field: 知识产权条款 + - id: "2" + check: ai + prompt: | + 请检查合同中知识产权条款是否完整。 + 知识产权条款:{{知识产权条款}} - 知识产权条款:{{知识产权条款}} + 评查要点(依据民法典第600条): + 1. 是否明确了知识产权的归属(买方/卖方/共有) + 2. 是否约定了使用许可的范围和方式 + 3. 是否约定了第三方知识产权侵权的责任承担 + 4. 对于软件/系统类采购,应特别关注源代码、数据归属 + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" - 评查要点(依据民法典第600条): + logic: "1 AND 2" - 1. 是否明确了知识产权的归属(买方/卖方/共有) - - 2. 是否约定了使用许可的范围和方式 - - 3. 是否约定了第三方知识产权侵权的责任承担 - - 4. 对于软件/系统类采购,应特别关注源代码、数据归属 - - - 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} - - 判断标准: - - - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 - - - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) - - - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) - - ' messages: pass: 知识产权条款完整 fail: 知识产权条款不完整 - type: ai_rule -- group: '来源: NR-MM-012 标的清单金额校验 — §595-596' - rules: - - rule_id: MM-023 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-023 · 标的清单金额校验 + # 来源: NR-MM-012 · 民法典第595-596条 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-023 name: 标的清单金额校验 risk: high - score: 5 - activate_if: 标的清单明细 != None + score: 4 + stages: - - id: '1' - check: required - field: 标的清单明细 - - id: '2' - check: required - field: 合同金额 - - id: '3' - check: ai - prompt: '请校验合同标的清单的金额一致性。 + - id: "1" + check: required + field: 标的清单明细 + - id: "2" + check: required + field: 合同金额 + - id: "3" + check: ai + prompt: | + 请校验合同标的清单的金额一致性。 + 标的清单明细:{{标的清单明细}} + 合同总金额:{{合同金额}} - 标的清单明细:{{标的清单明细}} + 评查要点(依据民法典第595-596条): + 1. 各项单价x数量是否等于对应项总价(逐项计算校验) + 2. 标的清单总价是否等于合同总金额 + 3. 服务范围描述是否足够具体(非含糊表述) - 合同总金额:{{合同金额}} + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" + logic: "1 AND 2 AND 3" - 评查要点(依据民法典第595-596条): - - 1. 各项单价x数量是否等于对应项总价(逐项计算校验) - - 2. 标的清单总价是否等于合同总金额 - - 3. 服务范围描述是否足够具体(非含糊表述) - - - 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} - - 判断标准: - - - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 - - - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) - - - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) - - ' messages: pass: 标的清单金额校验通过 fail: 标的清单金额不一致或服务范围不明确 - type: ai_rule -- group: '来源: NR-MM-014 招投标一致性 — §644' - rules: - - rule_id: MM-024 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-024 · 招投标信息引用完整 + # 来源: NR-MM-014 · 民法典第644条 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-024 name: 招投标信息引用完整 risk: high score: 3 - activate_if: 招投标信息 != None + stages: - - id: '1' - check: required - field: 招投标信息 - - id: '2' - check: ai - prompt: '请检查合同是否明确引用了招投标文件。 + - id: "1" + check: required + field: 招投标信息 + - id: "2" + check: ai + prompt: | + 请检查合同是否明确引用了招投标文件。 + 招投标信息:{{招投标信息}} - 招投标信息:{{招投标信息}} + 评查要点: + 1. 合同是否引用了招标文件编号/项目编号 + 2. 合同是否将招标文件、投标文件作为合同附件或组成部分 + 3. 合同主要条款不应实质性变更招投标内容 + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" - 评查要点: + logic: "1 AND 2" - 1. 合同是否引用了招标文件编号/项目编号 - - 2. 合同是否将招标文件、投标文件作为合同附件或组成部分 - - 3. 合同主要条款不应实质性变更招投标内容 - - - 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} - - 判断标准: - - - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 - - - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) - - - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) - - ' messages: pass: 合同与招投标文件一致 fail: 合同与招投标文件引用不完整 - type: ai_rule -- group: 合规性 · AI 语义判断(4 条) - rules: - - rule_id: MM-025 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-025 · 违约责任条款充分 + # 合规性 · AI 语义判断 · 民法典第577-585条 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-025 name: 违约责任条款充分 risk: medium - score: 5 + score: 4 + stages: - - id: '1' - check: required - field: 违约责任条款 - - id: '2' - check: ai - prompt: '请判断以下违约责任条款是否充分、合规。 + - id: "1" + check: required + field: 违约责任条款 + - id: "2" + check: ai + prompt: | + 请判断以下违约责任条款是否充分、合规。 + 条款内容:{{违约责任条款}} - 条款内容:{{违约责任条款}} + 充分的违约责任条款应当(依据民法典第577-585条): + 1. 明确违约情形(如逾期付款、逾期交货、质量不合格等) + 2. 明确违约金计算方式或赔偿标准 + 3. 不能只是笼统的模糊表述 + 4. 应当对双方的违约责任都有约定 + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" - 充分的违约责任条款应当(依据民法典第577-585条): + logic: "1 AND 2" - 1. 明确违约情形(如逾期付款、逾期交货、质量不合格等) - - 2. 明确违约金计算方式或赔偿标准 - - 3. 不能只是笼统的模糊表述 - - 4. 应当对双方的违约责任都有约定 - - - 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} - - 判断标准: - - - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 - - - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) - - - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) - - ' messages: pass: 违约责任条款充分 fail: 违约责任条款不充分 - type: ai_rule - - rule_id: MM-026 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-026 · 争议解决方式明确 + # 合规性 · AI 语义判断 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-026 name: 争议解决方式明确 risk: medium - score: 5 + score: 4 + stages: - - id: '1' - check: required - field: 争议解决条款 - - id: '2' - check: ai - prompt: '请判断以下争议解决条款是否符合法律要求。 + - id: "1" + check: required + field: 争议解决条款 + - id: "2" + check: ai + prompt: | + 请判断以下争议解决条款是否符合法律要求。 + 条款内容:{{争议解决条款}} - 条款内容:{{争议解决条款}} + 合规的争议解决条款应当: + 1. 明确指定具体的争议解决方式(仲裁或诉讼,二选一) + 2. 如选择仲裁,应明确仲裁机构名称 + 3. 如选择诉讼,应明确管辖法院 + 4. 不能同时约定仲裁和诉讼 + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" - 合规的争议解决条款应当: + logic: "1 AND 2" - 1. 明确指定具体的争议解决方式(仲裁或诉讼,二选一) - - 2. 如选择仲裁,应明确仲裁机构名称 - - 3. 如选择诉讼,应明确管辖法院 - - 4. 不能同时约定仲裁和诉讼 - - - 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} - - 判断标准: - - - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 - - - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) - - - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) - - ' messages: pass: 争议解决方式明确 fail: 争议解决条款未明确具体的仲裁机构/管辖法院 - type: ai_rule - - rule_id: MM-027 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-027 · 付款条款明确 + # 合规性 · AI 语义判断 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-027 name: 付款条款明确 risk: medium - score: 5 + score: 4 + stages: - - id: '1' - check: required - field: 付款方式 - - id: '2' - check: ai - prompt: '请判断以下付款条款是否明确。 + - id: "1" + check: required + field: 付款方式 + - id: "2" + check: ai + prompt: | + 请判断以下付款条款是否明确。 + 条款内容:{{付款方式}} - 条款内容:{{付款方式}} + 明确的付款条款应当包含: + 1. 付款金额或比例 + 2. 付款时间节点或触发条件 + 3. 付款方式(如银行转账) + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" - 明确的付款条款应当包含: + logic: "1 AND 2" - 1. 付款金额或比例 - - 2. 付款时间节点或触发条件 - - 3. 付款方式(如银行转账) - - - 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} - - 判断标准: - - - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 - - - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) - - - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) - - ' messages: pass: 付款条款明确 fail: 付款条款不够明确 - type: ai_rule - - rule_id: MM-028 + + # ═════════════════════════════════════════════════════════════ + # MM-SALE-028 · 保密条款完整 + # 合规性 · AI 语义判断 + # ═════════════════════════════════════════════════════════════ + - rule_id: MM-SALE-028 name: 保密条款完整 risk: low score: 3 - activate_if: 涉及保密信息 == "是" + stages: - - id: '1' - check: required - field: 保密条款 - - id: '2' - check: ai - prompt: '请判断以下保密条款是否完整。 + - id: "1" + check: required + field: 保密条款 + - id: "2" + check: ai + prompt: | + 请判断以下保密条款是否完整。 + 条款内容:{{保密条款}} - 条款内容:{{保密条款}} + 完整的保密条款应当包含: + 1. 保密信息的范围定义 + 2. 保密义务的期限 + 3. 违反保密义务的法律后果 + 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} + 判断标准: + - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 + - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) + - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) + schema: + type: object + required: [result, reason] + properties: + result: { type: string } + reason: { type: string } + suggestion: { type: string } + pass_when: "result != 'fail'" - 完整的保密条款应当包含: + logic: "1 AND 2" - 1. 保密信息的范围定义 - - 2. 保密义务的期限 - - 3. 违反保密义务的法律后果 - - - 请以JSON格式回答:{"result": "pass/warn/fail", "reason": "简要说明", "suggestion": "改进建议(仅warn/fail时填写)"} - - 判断标准: - - - pass:条款基本合理,能达到法律基本要求,道理上说得通即可 - - - warn:条款主体合理但有改进空间,不影响合同效力(如缺少锦上添花的条款、表述可以更精确等) - - - fail:条款存在严重缺陷,可能导致法律风险或合同纠纷(如完全缺失关键要素、违反强制性规定、金额计算错误等) - - ' messages: pass: 保密条款完整 fail: 保密条款不够完整 - type: ai_rule -- group: 银行信息 - rules: - - rule_id: MM-029 - name: 收款方银行信息完整 - risk: high - score: 5 - applies_in: - - executed - stages: - - id: '1' - check: required - fields: - - 收款方开户银行 - - 收款方银行账号 - messages: - pass: 收款方银行信息完整 - fail: 缺少收款方银行开户行或账号,付款无法执行 - type: deterministic diff --git a/rules/contract_tech/rules.yaml b/rules/contract_tech/rules.yaml index 0b9e8e9..314001b 100644 --- a/rules/contract_tech/rules.yaml +++ b/rules/contract_tech/rules.yaml @@ -1,786 +1,1455 @@ +# ═══════════════════════════════════════════════════════════════ +# 技术合同(技术开发/技术服务/采购) — 评查规则库 +# ═══════════════════════════════════════════════════════════════ +# 依据《中华人民共和国民法典》合同编通则(第470条) +# 及技术合同章(第843-887条)及相关法规 +# 适用于信息系统建设、软件开发、数据服务、平台采购等技术类合同的评查 +# 覆盖签署前审查(draft)和签署后审计(executed)两个阶段 + metadata: type_id: contract.tech - name: 技术合同 - version: '1.0' - last_updated: '2026-04-12' + name: 技术合同(技术开发/技术服务/采购) + version: "1.0" + last_updated: "2026-04-14" + + classification_keywords: + - 技术开发 + - 技术服务 + - 技术咨询 + - 软件开发 + - 系统建设 + - 平台采购 + tags: - - 合同 - - 技术 - - 开发 - - IT采购 - description: '依据《中华人民共和国民法典》合同编·通则(第470条)及技术合同章(第843-887条)。 - - 适用于技术开发、技术服务、IT系统建设采购等技术类合同的评查, + - 合同 + - 技术 + - 开发 + - 服务 + - 采购 + description: | + 依据《中华人民共和国民法典》合同编通则(第470条)、技术合同章(第843-887条)及相关法规。 + 适用于信息系统建设、软件开发、数据服务、平台采购等技术类合同的评查。 覆盖签署前审查(draft)和签署后审计(executed)两个阶段。 + 合并通用合同规则与技术合同专有规则,共 37 条评查规则。 - 原始规则来源:旧系统 08_技术合同.json(7条技术专项评查点)+ 通用合同评查点。 +# ───────────────────────────────────────────────────────────────── +# 字段抽取声明 +# required_from: 该字段从哪个阶段开始必需 +# draft → 起草阶段就必需(草稿没有也会被标记) +# executed → 仅已执行阶段必需(草稿可以缺失) +# 未声明 → 默认 executed +# ───────────────────────────────────────────────────────────────── - ' extract: -- group: '合同成立要素 — required_from: draft' - fields: - - name: 合同名称 - type: verbatim - required_from: draft - desc: 合同的完整名称/项目名称 - deep_retry: false - - name: 甲方 - type: verbatim - required_from: draft - desc: 委托方/采购方公司全称 - deep_retry: false - - name: 乙方 - type: verbatim - required_from: draft - desc: 研发方/供应商公司全称 - deep_retry: false - - name: 合同金额 - type: money - required_from: draft - desc: 合同总金额(数字) - deep_retry: false - - name: 合同金额大写 - type: verbatim - required_from: draft - desc: 合同总金额中文大写 - deep_retry: false -- group: 主体资格 - fields: - - name: 甲方法定代表人 - type: verbatim - required_from: draft - desc: 甲方法定代表人姓名 - deep_retry: false - - name: 乙方法定代表人 - type: verbatim - required_from: draft - desc: 乙方法定代表人姓名 - deep_retry: false - - name: 甲方地址 - type: verbatim - required_from: draft - desc: 甲方注册/办公地址 - deep_retry: false - - name: 乙方地址 - type: verbatim - required_from: draft - desc: 乙方注册/办公地址 - deep_retry: false - - name: 甲方统一社会信用代码 - type: uscc - required_from: executed - desc: 甲方18位统一社会信用代码 - deep_retry: false - - name: 乙方统一社会信用代码 - type: uscc - required_from: executed - desc: 乙方18位统一社会信用代码 - deep_retry: false -- group: '技术合同核心条款 — required_from: draft' - fields: - - name: 技术目标与方案 - type: string - required_from: draft - desc: 技术方案、技术目标、技术指标的完整描述 - deep_retry: false - - name: 技术标准与规范 - type: string - required_from: draft - desc: 引用的技术规范、行业标准(名称和编号) - deep_retry: false - - name: 实施计划与里程碑 - type: string - required_from: draft - desc: 实施阶段划分、里程碑节点和各阶段交付物 - deep_retry: false - - name: 交货期限 - type: string - required_from: draft - desc: 交货/交付时间要求 - deep_retry: false - - name: 付款方式 - type: string - required_from: draft - desc: 付款条件、方式、时间节点的完整描述 - deep_retry: false -- group: 验收与质保 - fields: - - name: 验收标准与流程 - type: string - required_from: draft - desc: 验收标准、验收流程和不合格处理方式 - deep_retry: false - - name: 质保期条款 - type: string - required_from: executed - desc: 质保期限、质保范围和质保服务内容 - deep_retry: false - - name: 培训条款 - type: string - required_from: executed - desc: 培训内容、培训方式和培训安排 - deep_retry: false -- group: 技术权利 - fields: - - name: 知识产权条款 - type: string - required_from: draft - desc: 技术成果归属、使用许可和后续改进分享 - deep_retry: false - - name: 技术风险分担 - type: string - required_from: draft - desc: 技术困难导致失败时的风险分担方式和通知义务 - deep_retry: false - - name: 技术支持与资料移交 - type: string - required_from: draft - desc: 技术支持方式、响应时间和技术资料移交清单 - deep_retry: false -- group: 法定/必备条款 - fields: - - name: 违约责任条款 - type: string - required_from: draft - desc: 违约责任的完整条款内容 - deep_retry: false - - name: 争议解决条款 - type: string - required_from: draft - desc: 争议解决方式(法院/仲裁)的完整描述 - deep_retry: false - - name: 不可抗力条款 - type: string - required_from: executed - desc: 不可抗力相关条款的完整内容 - deep_retry: false - - name: 保密条款 - type: string - required_from: draft - desc: 保密义务相关条款内容 - deep_retry: false - - name: 履约保证金条款 - type: string - required_from: executed - desc: 履约保证金金额、缴纳方式和退还条件 - deep_retry: false -- group: '签署要素 — required_from: executed' - fields: - - name: 签约日期 - type: date - required_from: executed - desc: 合同签订日期 - deep_retry: false - - name: 合同编号 - type: verbatim - required_from: executed - desc: 合同唯一编号 - deep_retry: false -- group: 辅助信息 - fields: - - name: 甲方联系人 - type: verbatim - required_from: executed - desc: 甲方项目联系人姓名 - deep_retry: false - - name: 甲方联系电话 - type: verbatim - required_from: executed - desc: 甲方联系电话 - deep_retry: false - - name: 乙方联系人 - type: verbatim - required_from: executed - desc: 乙方项目联系人姓名 - deep_retry: false - - name: 乙方联系电话 - type: verbatim - required_from: executed - desc: 乙方联系电话 - deep_retry: false - - name: 甲方开户银行 - type: verbatim - required_from: executed - desc: 甲方银行开户行名称 - deep_retry: false + # ── 合同基本信息 ── + - {name: 合同名称, type: verbatim, required_from: draft, description: 合同的完整名称} + - {name: 签约背景, type: string, required_from: draft, description: 签约背景、缘由或项目依据} + - {name: 引用法律法规, type: string, required_from: draft, description: 合同中引用的法律、法规名称} + - {name: 合同编号, type: verbatim, required_from: executed, description: 合同唯一编号} + - {name: 签约日期, type: date, required_from: executed, description: 合同签订日期} + - {name: 签约地点, type: verbatim, required_from: executed, description: 合同签订地点} + - {name: 合同份数, type: integer, required_from: executed, description: 合同正本份数} + - {name: 生效条件, type: string, required_from: executed, description: 合同生效的条件描述} + - {name: 审批情况, type: string, required_from: draft, description: 合同审批流程或审批信息} + + # ── 当事人 ── + - {name: 甲方, type: verbatim, required_from: draft, description: 甲方(委托方/采购方)公司全称} + - {name: 乙方, type: verbatim, required_from: draft, description: 乙方(开发方/服务方)公司全称} + - {name: 甲方法定代表人, type: verbatim, required_from: draft, description: 甲方法定代表人或负责人姓名} + - {name: 乙方法定代表人, type: verbatim, required_from: draft, description: 乙方法定代表人姓名} + - {name: 甲方地址, type: verbatim, required_from: draft, description: 甲方注册或办公地址} + - {name: 乙方地址, type: verbatim, required_from: draft, description: 乙方注册或办公地址} + - {name: 甲方联系人, type: verbatim, required_from: draft, description: 甲方项目联系人姓名} + - {name: 甲方联系电话, type: verbatim, required_from: draft, description: 甲方联系电话} + - {name: 乙方联系人, type: verbatim, required_from: draft, description: 乙方项目联系人姓名} + - {name: 乙方联系电话, type: verbatim, required_from: draft, description: 乙方联系电话} + - {name: 甲方统一社会信用代码, type: uscc, required_from: draft, description: 甲方18位统一社会信用代码} + - {name: 乙方统一社会信用代码, type: uscc, required_from: draft, description: 乙方18位统一社会信用代码} + - {name: 甲方资质信息, type: string, required_from: draft, description: 甲方相关资质证明描述} + - {name: 乙方资质信息, type: string, required_from: draft, description: 乙方资质证明、从业资格等描述} + - {name: 甲方授权委托信息, type: string, required_from: draft, description: 甲方签约代表的授权委托书信息} + - {name: 乙方授权委托信息, type: string, required_from: draft, description: 乙方签约代表的授权委托书信息} + + # ── 银行账户 ── + - {name: 甲方开户银行, type: verbatim, required_from: draft, description: 甲方银行开户行名称} + - {name: 甲方银行账号, type: verbatim, required_from: draft, description: 甲方银行账号} + - {name: 乙方开户银行, type: verbatim, required_from: draft, description: 乙方银行开户行名称} + - {name: 乙方银行账号, type: verbatim, required_from: draft, description: 乙方银行账号} + + # ── 标的与技术 ── + - {name: 合同标的描述, type: string, required_from: draft, description: 合同标的/服务内容的完整描述} + - {name: 技术方案, type: string, required_from: draft, description: 技术实现方案:定性+半定量描述"怎么做"(架构/方法论)。包括技术路线、架构设计、开发方法论、技术栈选择。负向约束:不要抽取商务条款、交付要求、验收标准} + - {name: 技术目标, type: string, required_from: draft, description: 技术目标:定性描述"做什么",即项目要达成的业务/功能目标。包括建设什么系统、实现什么功能。负向约束:不要抽取量化指标、商务条款、交付时间} + - {name: 技术指标, type: string, required_from: draft, description: 技术指标:纯定量描述"做到什么程度"(必须有数字+单位)。包括并发用户数、响应时间、吞吐量、容量、准确率等。严禁抽取商务条款、交付条款、验收条款、服务条款} + - {name: 技术标准规范, type: string, required_from: draft, description: 系统开发建设需遵循的技术标准、规范文件(编码规范、接口标准、安全标准、性能标准等)} + - {name: 质量标准, type: string, required_from: draft, description: 质量要求、检验方法的描述} + + # ── 验收 ── + - {name: 验收标准, type: string, required_from: draft, description: 功能验收、性能验收、安全验收等各项标准} + - {name: 验收流程, type: string, required_from: draft, description: 验收组织方、参与方、步骤、期限} + - {name: 不合格处理, type: string, required_from: draft, description: 验收不合格时的整改要求和处理方式} + + # ── 金额与支付 ── + - {name: 合同金额, type: money, required_from: draft, description: 合同含税总金额(数字)} + - {name: 合同金额大写, type: verbatim, required_from: draft, description: 合同含税总金额中文大写} + - {name: 不含税金额, type: money, required_from: draft, description: 不含税金额} + - {name: 税率, type: string, required_from: draft, description: 增值税税率(如6%、13%)} + - {name: 税额, type: money, required_from: draft, description: 增值税税额} + - {name: 付款方式, type: string, required_from: draft, description: 付款方式(银行转账/现金等)及完整描述} + - {name: 付款条件, type: string, required_from: draft, description: 付款阶段、比例、条件和期限的完整描述} + - {name: 附加标的物价款标准, type: string, required_from: draft, description: 附加/额外服务的价款标准约定} + + # ── 期限与地点 ── + - {name: 合同起始日期, type: date, required_from: draft, description: 合同有效期起始日期} + - {name: 合同终止日期, type: date, required_from: draft, description: 合同有效期终止日期} + - {name: 合同期限描述, type: string, required_from: draft, description: 合同期限的文字描述} + - {name: 履行地点, type: verbatim, required_from: draft, description: 项目实施/服务提供的地点} + - {name: 实施计划, type: string, required_from: draft, description: 实施阶段划分、里程碑节点、交付时间} + - {name: 交付物, type: string, required_from: draft, description: 各阶段应交付的成果物清单} + + # ── 条款 ── + - {name: 知识产权条款, type: string, required_from: draft, description: 知识产权归属、使用许可、后续改进的完整条款} + - {name: 技术风险条款, type: string, required_from: draft, description: 技术风险分担方式、通知义务的约定} + - {name: 技术支持条款, type: string, required_from: draft, description: 技术支持方式、响应时间、质保期约定} + - {name: 资料移交清单, type: string, required_from: draft, description: 应移交的技术资料清单(文档、源代码、操作手册等)} + - {name: 违约责任条款, type: verbatim, required_from: draft, description: 违约责任/违约条款的完整内容(原文逐字抽取,用于费用相关评查)} + - {name: 争议解决条款, type: string, required_from: draft, description: 争议解决方式及管辖机构的完整描述} + - {name: 不可抗力条款, type: string, required_from: draft, description: 不可抗力相关条款的完整内容} + - {name: 变更解除终止条款, type: string, required_from: draft, description: 合同变更、解除、终止的条件和程序} + - {name: 保密条款, type: string, required_from: draft, description: 保密义务相关条款内容(含正文及附件保密协议)} + - {name: 附件清单, type: string, required_from: draft, description: 合同附件的列表(序号、名称、类型)} + - {name: 补充协议条款, type: string, required_from: draft, description: 补充协议相关条款} + +# ───────────────────────────────────────────────────────────────── +# 规则列表 +# ───────────────────────────────────────────────────────────────── + rules: -- group: 完整性(11 条) - rules: - - rule_id: JS-001 - name: 合同主体齐全 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-001 · 合同基本信息完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-001 + name: 合同基本信息完整 risk: high - score: 10 - stages: - - id: '1' - check: required - field: 甲方 - - id: '2' - check: required - field: 乙方 - messages: - pass: 甲乙方信息完整 - fail: 缺少甲方或乙方信息,合同主体不明确 - type: deterministic - - rule_id: JS-002 - name: 技术目标与金额必填 - risk: high - score: 10 - stages: - - id: '1' - check: required - field: 技术目标与方案 - - id: '2' - check: required - field: 合同金额 - messages: - pass: 技术目标与金额信息完整 - fail: 缺少技术目标描述或合同金额 - type: deterministic - - rule_id: JS-003 - name: 合同名称必填 - risk: medium - score: 5 - stages: - - id: '1' - check: required - field: 合同名称 - messages: - pass: 合同名称已填写 - fail: 缺少合同名称 - type: deterministic - - rule_id: JS-004 - name: 法定代表人齐全 - risk: medium - score: 5 - stages: - - id: '1' - check: required - field: 甲方法定代表人 - - id: '2' - check: required - field: 乙方法定代表人 - messages: - pass: 甲乙方法定代表人信息完整 - fail: 缺少甲方或乙方法定代表人信息 - type: deterministic - - rule_id: JS-005 - name: 付款方式必填 - risk: high - score: 8 - stages: - - id: '1' - check: required - field: 付款方式 - messages: - pass: 付款方式已填写 - fail: 缺少付款方式 - type: deterministic - - rule_id: JS-006 - name: 知识产权条款存在 - risk: high - score: 8 - stages: - - id: '1' - check: required - field: 知识产权条款 - messages: - pass: 知识产权条款存在 - fail: 缺少知识产权条款,技术合同必须约定成果归属 - type: deterministic - - rule_id: JS-007 - name: 违约责任条款存在 - risk: high - score: 8 - stages: - - id: '1' - check: required - field: 违约责任条款 - messages: - pass: 违约责任条款存在 - fail: 缺少违约责任条款 - type: deterministic - - rule_id: JS-008 - name: 争议解决条款存在 - risk: medium - score: 5 - stages: - - id: '1' - check: required - field: 争议解决条款 - messages: - pass: 争议解决条款存在 - fail: 缺少争议解决条款 - type: deterministic - - rule_id: JS-009 - name: 验收标准存在 - risk: high - score: 8 - stages: - - id: '1' - check: required - field: 验收标准与流程 - messages: - pass: 验收标准已约定 - fail: 缺少验收标准,技术合同必须约定验收方式 - type: deterministic - - rule_id: JS-010 - name: 签约日期必填 - risk: high - score: 8 + score: 2 applies_in: - - executed + - executed + stages: - - id: '1' - check: required - field: 签约日期 + - id: "1" + check: required + field: 合同名称 + - id: "2" + check: required + field: 合同编号 + - id: "3" + check: required + field: 签约日期 + + logic: "1 AND 2 AND 3" + messages: - pass: 签约日期已填写 - fail: 缺少签约日期 - type: deterministic - - rule_id: JS-011 - name: 合同编号必填 + pass: 合同名称、编号、签约日期齐全 + fail: 合同名称、编号或签约日期缺失 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-002 · 合同名称合法有效 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-002 + name: 合同名称合法有效 risk: medium + score: 2 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同名称是否与合同内容一致。 + 合同名称:{{合同名称}} + 合同标的描述:{{合同标的描述}} + + 评查要点(依据民法典第467条): + 1. 合同名称必须与合同实际内容一致(如名为"采购合同"但实际为技术服务则不一致) + 2. 符合民法典有名合同特征的,应当采用标准名称或不会使人误解的通称 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 合同名称与内容一致 + fail: 合同名称与内容不一致 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-003 · 签约背景与法律依据 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-003 + name: 签约背景与法律依据 + risk: high + score: 4 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同的签约背景和法律依据是否准确。 + 签约背景:{{签约背景}} + 引用法律法规:{{引用法律法规}} + + 评查要点: + 1. 签约背景或缘由是否存在(1分) + 2. 合同依据的法律、法规必须准确、有效,不得引用已废止的法律(4分) + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明", "score": 0-5} + + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 签约背景存在且法律依据准确有效 + fail: 签约背景缺失或法律依据存在问题 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-004 · 当事人信息准确完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-004 + name: 当事人信息准确完整 + risk: high + score: 2 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同各方当事人的信息是否准确完整。 + 甲方名称:{{甲方}},法定代表人:{{甲方法定代表人}},地址:{{甲方地址}},联系电话:{{甲方联系电话}} + 乙方名称:{{乙方}},法定代表人:{{乙方法定代表人}},地址:{{乙方地址}},联系电话:{{乙方联系电话}} + + 评查要点(依据民法典第470条第1项): + 1. 各方企业名称、法定代表人、地址、联系方式是否齐全 + 2. 各项信息在合同正文中是否前后一致 + 3. 如为自然人,应有姓名、身份证号、住址、联系电话 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 当事人信息完整一致 + fail: 当事人信息不完整或不一致 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-005 · 合同主体合法有效 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-005 + name: 合同主体合法有效 + risk: high + score: 2 + + stages: + - id: "1" + check: ai + prompt: | + 请检查该签署方的合同主体是否合法有效。 + 名称:{{甲方}} + 签约代表:{{甲方法定代表人}} + 授权委托信息:{{甲方授权委托信息}} + 对方名称:{{乙方}} + 签约代表:{{乙方法定代表人}} + 授权委托信息:{{乙方授权委托信息}} + + 评查要点(依据民法典第143条、第171条): + 1. 如为企业法人,签订期限应在经营期限内 + 2. 代理人签订合同的,应提供合法、有效、明确的授权书 + 3. 如为分支机构签订,应在法人授权范围内 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 合同主体合法有效 + fail: 合同主体合法性存疑 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-006 · 合同主体资质合格 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-006 + name: 合同主体资质合格 + risk: high score: 3 - applies_in: - - executed + stages: - - id: '1' - check: required - field: 合同编号 + - id: "1" + check: ai + prompt: | + 请检查合同对方主体的资质是否合格。 + 对方名称:{{乙方}} + 资质信息:{{乙方资质信息}} + 服务类型:{{合同标的描述}} + + 评查要点(依据民法典第505条): + 1. 对方提供的资质证明必须符合法律法规规章规定的相应等级 + 2. 从业人员必须具备相应资格,确保具有足够的履行合同能力 + 3. 技术合同中乙方应具备相应的技术开发/服务能力资质 + + 注意:如合同标的不涉及特定资质要求,可直接PASS。 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + messages: - pass: 合同编号已填写 - fail: 缺少合同编号 - type: deterministic -- group: 规范性(2 条) - rules: - - rule_id: JS-012 - name: 甲方信用代码校验 - risk: medium - score: 5 - applies_in: - - executed + pass: 合同主体资质合格或不涉及特定资质 + fail: 合同主体资质可能不合格 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-007 · 标的内容合法 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-007 + name: 标的内容合法 + risk: high + score: 2 + stages: - - id: '1' - check: format - field: 甲方统一社会信用代码 - format: uscc + - id: "1" + check: ai + prompt: | + 请检查合同标的是否合法。 + 标的描述:{{合同标的描述}} + + 评查要点(依据民法典第153条、第154条): + 1. 标的是否属于法律禁止交易的服务或内容 + 2. 是否涉及特殊行业许可要求 + 3. 合同标的是否违反法律禁止性规定或公序良俗 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + messages: - pass: 甲方统一社会信用代码校验通过 - fail: 甲方统一社会信用代码校验位错误 - type: deterministic - - rule_id: JS-013 - name: 乙方信用代码校验 - risk: medium - score: 5 - applies_in: - - executed - stages: - - id: '1' - check: format - field: 乙方统一社会信用代码 - format: uscc - messages: - pass: 乙方统一社会信用代码校验通过 - fail: 乙方统一社会信用代码校验位错误 - type: deterministic -- group: 合理性(3 条) - rules: - - rule_id: JS-014 - name: 金额大小写一致 + pass: 合同标的内容合法 + fail: 合同标的合法性存疑 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-008 · 合同标的准确完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-008 + name: 合同标的准确完整 risk: high score: 10 + stages: - - id: '1' - check: amount_match - number: 合同金额 - chinese: 合同金额大写 + - id: "1" + check: ai + prompt: | + 请检查技术合同的标的信息是否准确完整。 + 合同标的描述:{{合同标的描述}} + 技术方案:{{技术方案}} + 技术目标:{{技术目标}} + 技术指标:{{技术指标}} + + 评查要点(依据民法典第470条第2项、第510条): + 1. 合同标的描述:是否列出了具体的功能模块和服务范围(不能只有"详见招标文件"等含糊表述) + 2. 技术方案:是否说明了如何实现(技术路线、架构、方法论),不能只有功能罗列 + 3. 技术目标:是否说明了要达成什么业务效果(建设什么系统、实现什么功能),定性描述 + 4. 技术指标:是否包含量化指标(性能参数、响应时间、并发数等),必须有具体数字 + + 容错规则(重要): + - 如果"技术指标"中混入了商务条款(如付款、违约金、保证金、交货期、质保期等),这属于数据抽取问题,不应判定为"标的不完整"。请在 reason 中指出"技术指标字段混入了商务条款,但不影响标的完整性判定",并基于现有的性能参数部分进行判定。 + - 只有当技术指标完全为空、或完全没有性能参数时,才判定为不完整。 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明(需指出哪个字段存在问题)"} + + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + messages: - pass: 金额大小写一致 - fail: 合同金额数字与大写不一致,存在篡改风险 - type: deterministic - - rule_id: JS-015 - name: 金额为正数 + pass: 标的信息准确完整 + fail: 标的信息不完整或过于模糊 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-009 · 技术标准与质量条款 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-009 + name: 技术标准与质量条款 + risk: high + score: 4 + + stages: + - id: "1" + check: ai + prompt: | + 请检查技术合同中技术标准与质量条款的完整性和明确性。 + 技术规范:{{技术标准规范}} + 质量标准:{{质量标准}} + + 评查要点(依据民法典第845条、第615-616条): + 1. 是否引用了具体的技术规范文件(名称、编号、版本) + 2. 是否引用了适用的国家标准(GB)、行业标准或国际标准(如GB/T 22239-2019、OGC标准等) + 3. 标准引用是否完整(标准号、标准名称、版本年份) + 4. 质量检验方法是否明确 + 5. 不能仅有"符合相关标准""按行业惯例"等含糊表述 + 6. 注意区分:"评查基础标准"等业务数据标准是系统处理的数据内容,不属于系统技术标准 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 技术标准引用明确,质量条款清晰 + fail: 技术标准与质量条款不够明确 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-010 · 合同金额大小写一致 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-010 + name: 合同金额大小写一致 + risk: high + score: 2 + + stages: + - id: "1" + check: amount_match + number: 合同金额 + chinese: 合同金额大写 + + logic: "1" + + messages: + pass: 合同金额大小写一致 + fail: 合同金额数字与大写不一致 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-011 · 付款条款完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-011 + name: 付款条款完整 + risk: high + score: 3 + + stages: + - id: "1" + check: required + field: 付款方式 + - id: "2" + check: required + field: 付款条件 + + logic: "1 AND 2" + + messages: + pass: 付款条款完整 + fail: 付款方式或付款条件缺失 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-012 · 附加标的物价款标准 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-012 + name: 附加标的物价款标准 risk: low - score: 3 + score: 1 + stages: - - id: '1' - check: compare - left: 合同金额 - op: '>' - right: 0 + - id: "1" + check: ai + prompt: | + 请检查合同是否涉及附加、额外标的物,如涉及是否明确了价款标准。 + 合同标的描述:{{合同标的描述}} + 附加标的物价款标准:{{附加标的物价款标准}} + + 评查要点(依据民法典第510条、第511条): + 1. 如合同可能涉及额外工作量、附加服务,是否约定了价款标准 + 2. 如合同标的已全部明确且无附加项,可直接PASS + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + messages: - pass: 合同金额为正数 - fail: 合同金额不为正数,数据异常 - type: deterministic - - rule_id: JS-016 - name: 签约日期不是未来 - risk: low - score: 3 - applies_in: - - executed - stages: - - id: '1' - check: assert - expr: parse_date(签约日期) != None and (today() - parse_date(签约日期)).days >= 0 and (today() - parse_date(签约日期)).days <= 3650 - messages: - pass: 签约日期在合理范围内 - fail: 签约日期为未来日期或距今超过10年 - type: deterministic -- group: '来源: NR-JS-001 技术目标与指标明确性 — §843, §845' - rules: - - rule_id: JS-017 - name: 技术目标与指标明确 - risk: high - score: 5 - stages: - - id: '1' - check: required - field: 技术目标与方案 - - id: '2' - check: ai - prompt: '请检查技术合同中技术目标与指标的明确性。 + pass: 附加标的物价款已明确或不涉及 + fail: 附加标的物价款标准缺失 - - 技术方案/目标/指标:{{技术目标与方案}} - - - 评查要点(依据民法典第843、845条): - - 1. 技术方案是否具体描述了技术路线、方法论和实现方式 - - 2. 技术目标是否明确、可衡量,不能仅有「满足需求」等含糊表述 - - 3. 技术指标是否有量化参数(性能指标、精度要求、响应时间等) - - 4. 技术方案与技术目标是否匹配 - - ' - messages: - pass: 技术目标与指标约定明确 - fail: 技术目标与指标约定不明确 - type: ai_rule -- group: '来源: NR-JS-002 技术标准与规范 — §845' - rules: - - rule_id: JS-018 - name: 技术标准与规范引用明确 + # ═════════════════════════════════════════════════════════════ + # JS-TECH-013 · 银行账户信息完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-013 + name: 银行账户信息完整 risk: medium - score: 3 + score: 2 + applies_in: + - executed + stages: - - id: '1' - check: required - field: 技术标准与规范 - - id: '2' - check: ai - prompt: '请检查技术合同中技术标准与规范的引用情况。 + - id: "1" + check: ai + prompt: | + 请检查合同各方(甲方和乙方)的银行账户信息是否完整。 + 甲方开户银行:{{甲方开户银行}} + 甲方银行账号:{{甲方银行账号}} + 乙方开户银行:{{乙方开户银行}} + 乙方银行账号:{{乙方银行账号}} + 判断规则: + 第一步:判断该方是付款方还是收款方。甲方一般为付款方(委托方),不需要提供收款账号,直接PASS。 + 第二步:若该方是收款方(乙方/开发方/服务提供方),检查: + 1. 开户银行不能为空 + 2. 银行账号不能为空 + 3. 银行账号应为数字,长度通常为16-20位 - 技术规范/行业标准:{{技术标准与规范}} + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" - 评查要点(依据民法典第845条): + logic: "1" - 1. 是否引用了具体的技术规范文件(名称、编号) - - 2. 是否引用了适用的国家标准(GB)、行业标准或国际标准 - - 3. 标准引用是否完整(标准号、标准名称、版本年份) - - 4. 不能仅有「符合相关标准」等含糊表述 - - ' messages: - pass: 技术标准与规范引用明确 - fail: 技术标准与规范引用不明确 - type: ai_rule -- group: '来源: NR-JS-003 实施计划与里程碑 — §845, §853' - rules: - - rule_id: JS-019 + pass: 银行账户信息完整 + fail: 收款方银行账户信息不完整 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-014 · 税务信息完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-014 + name: 税务信息完整 + risk: medium + score: 1 + + stages: + - id: "1" + check: required + field: 不含税金额 + - id: "2" + check: required + field: 税率 + - id: "3" + check: required + field: 税额 + + logic: "1 AND 2 AND 3" + + messages: + pass: 税务信息(不含税金额、税率、税额)完整 + fail: 缺少不含税金额、税率或税额,可能存在编制疏漏 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-015 · 合同期限具体准确 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-015 + name: 合同期限具体准确 + risk: high + score: 4 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同期限是否具体准确。 + 起始日期:{{合同起始日期}} + 终止日期:{{合同终止日期}} + 合同期限描述:{{合同期限描述}} + 签约日期:{{签约日期}} + + 评查要点(依据民法典第470条、第511条): + 1. **起始日期判断优先级**: + - 优先级1:如果"合同起始日期"有具体日期,则以该日期为准 + - 优先级2:如果"合同起始日期"为空,但有明确的"签约日期",通常签约日期即为合同生效起始日期,应视为明确 + - 优先级3:如果"合同期限描述"中说明"自签约之日起""自本合同签订之日起""自双方签字盖章之日起",则签约日期即为起始日期 + - 特殊情况:如果起始日期依赖于其他条件(如"验收合格之日起"),需说明该条件是否合理 + 2. **合同期限完整性**:检查是否有明确的终止日期或合同期限(如1年、3年等) + 3. **日期格式**:起始/终止日期应为具体日期(年月日齐全),或可明确推算 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明(需说明起始日期如何确定)"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 合同期限明确 + fail: 合同期限不明确 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-016 · 合同地点具体准确 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-016 + name: 合同地点具体准确 + risk: medium + score: 2 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同中履行地点是否明确。 + 履行地点:{{履行地点}} + 签约地点:{{签约地点}} + + 评查要点(依据民法典第470条、第511条): + 1. 如合同涉及实施地点约定,地址是否具体 + 2. 技术合同的服务实施地点是重要履约要素,建议明确,如提及"甲方指定地点",可PASS + 3. 如合同无须约定具体地址,可PASS + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 合同地点明确 + fail: 合同地点不够具体 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-017 · 实施计划与里程碑完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-017 name: 实施计划与里程碑完整 risk: high - score: 5 + score: 4 + stages: - - id: '1' - check: required - field: 实施计划与里程碑 - - id: '2' - check: ai - prompt: '请检查技术合同中实施计划与里程碑的完整性。 + - id: "1" + check: ai + prompt: | + 请检查技术合同中实施计划与里程碑的完整性。 + 实施计划:{{实施计划}} + 交付物:{{交付物}} + 评查要点(依据民法典第845条、第853条): + 1. 是否明确划分了实施阶段(需求分析、方案设计、开发实施、测试验收等) + 2. 各阶段是否有明确的时间节点或里程碑 + 3. 各阶段是否明确了应交付的成果物 + 4. 总工期是否合理 + 5. 不能仅有"合同生效后XX个工作日内"的笼统描述 - 实施阶段/里程碑/交付物:{{实施计划与里程碑}} + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" - 评查要点(依据民法典第845、853条): + logic: "1" - 1. 是否明确划分了实施阶段(需求分析、方案设计、开发实施、测试验收等) - - 2. 各阶段是否有明确的时间节点或里程碑 - - 3. 各阶段是否明确了应交付的成果物 - - 4. 总工期是否合理 - - ' messages: pass: 实施计划与里程碑约定完整 fail: 实施计划与里程碑约定不完整 - type: ai_rule -- group: '来源: NR-JS-006 技术验收标准 — §845' - rules: - - rule_id: JS-020 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-018 · 技术验收标准完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-018 name: 技术验收标准完整 risk: high - score: 5 + score: 4 + stages: - - id: '1' - check: required - field: 验收标准与流程 - - id: '2' - check: ai - prompt: '请检查技术合同中验收标准条款的完整性。 + - id: "1" + check: ai + prompt: | + 请检查技术合同中验收标准条款的完整性。 + 验收标准:{{验收标准}} + 验收流程:{{验收流程}} + 不合格处理:{{不合格处理}} + 评查要点(依据民法典第845条): + 1. 验收标准是否明确(功能验收、性能验收、安全验收等各项标准) + 2. 验收流程是否清晰(验收组织方、参与方、验收步骤、验收期限) + 3. 是否约定了验收不合格时的整改要求和处理方式 + 4. 验收标准应与技术目标和技术指标相对应 + 5. 是否约定了分阶段验收还是整体验收 - 验收标准/流程/不合格处理:{{验收标准与流程}} + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 - 评查要点(依据民法典第845条): + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" - 1. 验收标准是否明确(功能验收、性能验收、安全验收等各项标准) + logic: "1" - 2. 验收流程是否清晰(验收组织方、参与方、验收步骤、验收期限) - - 3. 是否约定了验收不合格时的整改要求和处理方式 - - 4. 是否约定了分阶段验收(初验/终验)还是整体验收 - - ' messages: pass: 技术验收标准约定完整 fail: 技术验收标准约定不完整 - type: ai_rule -- group: '来源: NR-JS-004 知识产权归属 — §859, §860, §861' - rules: - - rule_id: JS-021 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-019 · 知识产权归属明确 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-019 name: 知识产权归属明确 risk: high - score: 5 + score: 4 + stages: - - id: '1' - check: required - field: 知识产权条款 - - id: '2' - check: ai - prompt: '请检查技术合同中知识产权归属条款的完整性。 + - id: "1" + check: ai + prompt: | + 请检查技术合同中知识产权归属条款的完整性。 + 知识产权条款:{{知识产权条款}} + 评查要点(依据民法典第859-861条): + 1. 是否明确约定技术成果(专利、软件著作权、技术秘密等)的归属 + 2. 是否区分了委托方和开发方各自的权利 + 3. 是否约定了技术成果使用许可的范围和方式 + 4. 是否约定了后续改进技术成果的分享办法 + 5. 对于软件开发类合同,应特别关注源代码、数据的归属 + 6. 民法典规定委托开发的专利申请权默认属于研发方,如需归委托方应明确约定 - 知识产权条款:{{知识产权条款}} + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 - 评查要点(依据民法典第859-861条): + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" - 1. 是否明确约定技术成果(专利、软件著作权、技术秘密等)的归属 + logic: "1" - 2. 是否区分委托方和研发方各自的权利 - - 3. 是否约定了技术成果使用许可的范围和方式 - - 4. 对于软件开发类合同,应特别关注源代码、数据的归属 - - 5. 民法典规定委托开发的专利申请权默认属于研发方,如需归委托方应明确约定 - - ' messages: pass: 知识产权归属约定明确 fail: 知识产权归属约定不明确 - type: ai_rule -- group: '来源: NR-JS-007 技术风险分担 — §858' - rules: - - rule_id: JS-022 - name: 技术风险分担明确 - risk: medium - score: 3 - stages: - - id: '1' - check: required - field: 技术风险分担 - - id: '2' - check: ai - prompt: '请检查技术合同中技术风险分担条款的完整性。 - - 风险分担条款:{{技术风险分担}} - - - 评查要点(依据民法典第858条): - - 1. 是否约定了因技术困难导致研发失败或部分失败时的风险分担方式 - - 2. 是否约定了研发过程中遇到技术困难时的通知义务和时限 - - 3. 风险分担方式是否合理(费用分担、成果归属等) - - 4. 是否区分了可归责于一方的失败和不可归责的技术风险 - - ' - messages: - pass: 技术风险分担约定明确 - fail: 技术风险分担约定缺失或不明确 - type: ai_rule -- group: '来源: NR-JS-008 技术支持与资料移交 — §853, §880' - rules: - - rule_id: JS-023 - name: 技术支持与资料移交完整 + # ═════════════════════════════════════════════════════════════ + # JS-TECH-020 · 技术风险分担 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-020 + name: 技术风险分担 risk: medium score: 2 + stages: - - id: '1' - check: required - field: 技术支持与资料移交 - - id: '2' - check: ai - prompt: '请检查技术合同中技术支持与资料移交条款的完整性。 + - id: "1" + check: ai + prompt: | + 请检查技术合同中技术风险分担条款。 + 技术风险条款:{{技术风险条款}} + 评查要点(依据民法典第858条): + 1. 是否约定了因技术困难导致研发失败或部分失败时的风险分担方式 + 2. 是否约定了研发过程中遇到技术困难时的通知义务和时限 + 3. 无约定时风险由当事人合理分担(民法典默认规则),建议明确约定 - 技术支持条款:{{技术支持与资料移交}} + 如合同未涉及技术风险分担条款,返回FAIL并说明建议补充。 + 如合同明确约定了相关条款,返回PASS。 + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} - 评查要点(依据民法典第853、880条): + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" - 1. 是否约定了技术支持的方式(现场、远程、电话等) + logic: "1" - 2. 是否约定了技术问题的响应时间和解决时限 + messages: + pass: 技术风险分担约定明确 + fail: 技术风险分担约定缺失,建议补充 - 3. 是否列明了应移交的技术资料清单(技术文档、操作手册、源代码等) + # ═════════════════════════════════════════════════════════════ + # JS-TECH-021 · 技术支持与资料移交 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-021 + name: 技术支持与资料移交 + risk: medium + score: 1 - 4. 技术资料的移交时间和方式是否明确 + stages: + - id: "1" + check: ai + prompt: | + 请检查技术合同中技术支持与资料移交条款的完整性。 + 技术支持条款:{{技术支持条款}} + 资料移交清单:{{资料移交清单}} + + 评查要点(依据民法典第853条、第880条): + 1. 是否约定了技术支持的方式(现场、远程、电话等)和质保期 + 2. 是否约定了技术问题的响应时间和解决时限 + 3. 是否列明了应移交的技术资料清单(技术文档、操作手册、源代码等) + 4. 技术资料的移交时间和方式是否明确 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" - ' messages: pass: 技术支持与资料移交条款完整 fail: 技术支持与资料移交条款不完整 - type: ai_rule -- group: 合规性 · AI 语义判断(4 条) - rules: - - rule_id: JS-024 - name: 违约责任条款充分 - risk: medium - score: 5 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-022 · 违约责任形式明确 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-022 + name: 违约责任形式明确 + risk: high + score: 4 + stages: - - id: '1' - check: required - field: 违约责任条款 - - id: '2' - check: ai - prompt: '请判断以下违约责任条款是否充分、合规。 + - id: "1" + check: required + field: 违约责任条款 + - id: "2" + check: ai + prompt: | + 请检查违约责任条款是否明确。 + 违约条款:{{违约责任条款}} + 合同金额:{{合同金额}} + 评查要点(依据民法典第577条): + 1. 区分合同各方主体分别的责任,并分别评查合法、合理性 + 2. 违约情形是否有约定(具体情形或通用条款均可,"双方违反本合同任何条款"属于有效约定) - 条款内容:{{违约责任条款}} + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 - 充分的违约责任条款应当(依据民法典第577-585条): + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" - 1. 明确违约情形(如逾期付款、逾期交付、质量不合格、擅自转包等) + logic: "1 AND 2" - 2. 明确违约金计算方式或赔偿标准 - - 3. 不能只是笼统的「违约要赔偿」之类的模糊表述 - - 4. 应当对双方的违约责任都有约定 - - ' messages: - pass: 违约责任条款充分 - fail: 违约责任条款不充分 - type: ai_rule - - rule_id: JS-025 - name: 争议解决方式明确 - risk: medium - score: 5 + pass: 违约责任条款完整 + fail: 违约责任条款不完整 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-023 · 违约金条款完整性与合理性 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-023 + name: 违约金条款完整性与合理性 + risk: high + score: 6 + stages: - - id: '1' - check: required - field: 争议解决条款 - - id: '2' - check: ai - prompt: '请判断以下争议解决条款是否符合法律要求。 + - id: "1" + check: required + field: 违约责任条款 + - id: "2" + check: ai + prompt: | + 请审查违约金条款的完整性与合理性。 + 违约责任条款:{{违约责任条款}} + 合同金额:{{合同金额}} + 评查方法: + 1. 【主体识别】:识别合同中涉及的所有责任主体(如甲方、乙方、多方合同中的各方) + 2. 【情形拆分】:对每个主体,列出其所有违约情形(逾期、质量不合格、单方解除、转包等) + 3. 【条款分析】:对每个违约情形,抽取以下信息: + - 违约金类型:日违约金/固定比例/赔偿损失/没收保证金/解除合同等 + - 计算方式:日违约金的每日标准、固定比例的百分比、赔偿的计算依据 + - 上限约束:是否有最高限额(如"不超过XX%"、"最高XX元") + - 累计条件:注意"直至XX为止""持续计算""按日累计"等可能无上限的表述 + 4. 【合理性评估】(依据民法典第585条): + - **上限优先原则**:如果违约金条款明确规定了金额上限(如"不超过XX%"、"最高XX元"),应以上限为准进行判定,不再计算年化率是否过高 + - 日违约金年化:仅对无上限条款时参考,每日1‰≈36.5%/年,每日5‰≈182.5%/年 + - 累计上限:有上限的合理,无上限的需评估长期累计风险 + - 固定比例:一般不超过合同总额的30% + - 责任对等:对比各方违约责任,是否存在显失公平 + 5. 该方权益是否有基本保护(如对方违约时自己能获得的补偿) - 条款内容:{{争议解决条款}} + 评查要点: + ✓ 完整性:各方的主要违约情形是否都有约定,不得缺失某方的责任条款 + ✓ 明确性:违约金标准是否可计算,不得使用"另行协商""按法律规定"等模糊表述 + ✓ 合理性:违约金是否过高或过低,日违约金需考虑累计风险 + ✓ 对等性:各方违约责任是否基本对等,不得一方极重一方极轻 + ✓ 上限保护:日违约金条款是否有合理上限,无上限的需特别注明风险 + 请以JSON格式回答:{"passed": true/false, "reason": "按主体分项说明:哪些合理、哪些不合理及具体原因"} - 合规的争议解决条款应当: + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 - 1. 明确指定具体的争议解决方式(仲裁或诉讼,二选一) + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" - 2. 如选择仲裁,应明确仲裁机构名称 + logic: "1 AND 2" - 3. 如选择诉讼,应明确管辖法院 + messages: + pass: 违约金条款完整且合理 + fail: 违约金条款不完整或不合理 - 4. 不能同时约定仲裁和诉讼 + # ═════════════════════════════════════════════════════════════ + # JS-TECH-024 · 争议解决方式明确 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-024 + name: 争议解决方式明确 + risk: high + score: 5 + + stages: + - id: "1" + check: required + field: 争议解决条款 + - id: "2" + check: ai + prompt: | + 请检查合同争议解决条款。 + 争议解决条款:{{争议解决条款}} + 甲方地址:{{甲方地址}} + 乙方地址:{{乙方地址}} + 履行地点:{{履行地点}} + + 请分两步审查争议解决条款: + 【第一步:形式审查】 + - 是否明确选择诉讼或仲裁其中一种? + - 是否出现"或仲裁/或诉讼"等并列表述? + → 若形式不通过,直接返回 {"passed": false, "reason": "形式违规:..."} + + 【第二步:实质审查(仅当形式通过时执行)】 + - 提取约定的管辖法院/仲裁机构所在地:{{管辖地点}} + - 提取关联地点:甲方住所地{{甲方地址}}、乙方住所地{{乙方地址}}、合同履行地{{履行地点}} + - 依据《民事诉讼法》第35条,判断{{管辖地点}}是否与上述任一地点存在实际联系 + → 若无实际联系,返回 {"passed": false, "reason": "管辖约定可能因违反民诉法第35条而无效,建议修改为..."} + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1 AND 2" - ' messages: pass: 争议解决方式明确 - fail: 争议解决条款缺失或未明确具体的仲裁机构/管辖法院 - type: ai_rule - - rule_id: JS-026 - name: 付款条款明确 + fail: 争议解决方式约定不当 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-025 · 不可抗力条款存在 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-025 + name: 不可抗力条款存在 risk: medium - score: 5 + score: 1 + stages: - - id: '1' - check: required - field: 付款方式 - - id: '2' - check: ai - prompt: '请判断以下付款条款是否明确。 + - id: "1" + check: required + field: 不可抗力条款 + logic: "1" - 条款内容:{{付款方式}} - - - 明确的付款条款应当包含: - - 1. 付款金额或比例(如「支付合同总额的30%」) - - 2. 付款时间节点或触发条件(如「验收合格后15个工作日内」) - - 3. 付款方式(如银行转账) - - 4. 对技术合同,通常应有分期付款安排(预付款、阶段款、验收款、质保金) - - ' messages: - pass: 付款条款明确 - fail: 付款条款不够明确 - type: ai_rule - - rule_id: JS-027 - name: 保密条款完整 - risk: low + pass: 不可抗力条款存在 + fail: 缺少不可抗力条款 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-026 · 变更解除终止条款完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-026 + name: 变更解除终止条款完整 + risk: high + score: 4 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同变更、解除、终止条款是否完整并保障甲方(委托方)权益。 + 变更解除终止条款:{{变更解除终止条款}} + + 评查要点(依据民法典第543条、第562条、第563条): + 1. 合同变更条件和程序是否明确 + 2. 解除或终止条件是否明确,通知期限是否约定 + 3. 对方违约时甲方是否有足够的救济手段(解除合同、要求赔偿等) + 4. 终止条款是否对甲方不利(如对方可随意终止而甲方不能) + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 变更解除终止条款完整 + fail: 变更解除终止条款不完整或不利于己方 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-027 · 生效条件明确 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-027 + name: 生效条件明确 + risk: medium score: 3 + stages: - - id: '1' - check: required - field: 保密条款 - - id: '2' - check: ai - prompt: '请判断以下保密条款是否完整。 + - id: "1" + check: required + field: 合同份数 + - id: "2" + check: required + field: 生效条件 + logic: "1 AND 2" - 条款内容:{{保密条款}} - - - 完整的保密条款应当包含: - - 1. 保密信息的范围定义(哪些信息属于保密信息) - - 2. 保密义务的期限(合同期内还是延伸到终止后) - - 3. 违反保密义务的法律后果 - - ' messages: - pass: 保密条款完整 - fail: 保密条款不够完整 - type: ai_rule + pass: 合同份数和生效条件明确 + fail: 缺少合同份数或生效条件 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-028 · 保密条款存在 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-028 + name: 保密条款存在 + risk: medium + score: 4 + + stages: + - id: "1" + check: required + field: 保密条款 + + logic: "1" + + messages: + pass: 保密条款存在 + fail: 缺少保密条款 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-029 · 附件条款完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-029 + name: 附件条款完整 + risk: low + score: 2 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同附件条款是否完整。 + 附件清单:{{附件清单}} + + 评查方法: + 1. 首先判断"附件清单"字段是否有值: + - 如果为空或null,说明合同未列明附件 + - 如果有值(如"1.廉洁合同;2.保密协议"),说明合同已列明附件 + 2. 检查附件清单的完整性: + - 是否有编号(如1.、2.、附件一、附件二) + - 是否有附件名称 + - 常见附件如廉洁合同、保密协议是否列入 + 3. 判断标准: + - 附件清单有值且包含编号和名称 → PASS(合同已列明附件) + - 附件清单为空但合同实际有附件 → FAIL(未列明) + - 合同明确无附件 → PASS + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 附件条款完整或无附件 + fail: 附件条款不完整 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-030 · 补充协议条款完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-030 + name: 补充协议条款完整 + risk: medium + score: 2 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同中是否涉及补充协议条款。 + 补充协议条款:{{补充协议条款}} + + 评查要点: + 1. 如合同包含补充协议或变更协议,应具有协议编号、原合同编号、生效日期 + 2. 如合同不涉及补充协议,直接PASS + 3. 补充协议应有与原合同的冲突解决条款 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 补充协议条款完整或无补充协议 + fail: 补充协议条款不完整 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-031 · 合同文本格式规范(暂时注释 - numbering check 未实现) + # ═════════════════════════════════════════════════════════════ + # - rule_id: JS-TECH-031 + # name: 合同文本格式规范 + # risk: medium + # score: 2 + # group: 通用条款 + # + # stages: + # - id: "1" + # check: numbering + # + # logic: "1" + # + # messages: + # pass: 合同文本格式规范 + # fail: 合同文本格式不规范 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-032 · 骑缝章检查 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-032 + name: 骑缝章检查 + risk: medium + score: 2 + applies_in: + - executed + + stages: + - id: "1" + check: visual + element: 骑缝章 + + logic: "1" + + messages: + pass: 已加盖骑缝章 + fail: 未检测到骑缝章 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-033 · 签署信息完整 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-033 + name: 签署信息完整 + risk: high + score: 2 + applies_in: + - executed + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同各签署方的签署信息是否完整。 + 甲方:{{甲方}},法定代表人:{{甲方法定代表人}} + 乙方:{{乙方}},法定代表人:{{乙方法定代表人}} + 签约日期:{{签约日期}} + + 评查标准(依据民法典第490条): + 1. 各方是否有签名或盖章(至少一项) + 2. 签署日期应有具体日期 + + 请以JSON格式回答:{"passed": true/false, "reason": "简要说明"} + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 签署信息完整 + fail: 签署信息不完整 + + # ═════════════════════════════════════════════════════════════ + # JS-TECH-034 · 签署权限审查 + # ═════════════════════════════════════════════════════════════ + - rule_id: JS-TECH-034 + name: 签署权限审查 + risk: high + score: 2 + + stages: + - id: "1" + check: ai + prompt: | + 请检查合同签署人的权限是否完整。 + 授权信息:{{甲方授权委托信息}} + 签约日期:{{签约日期}} + + 评查要点(依据民法典第61条、第170条): + 1. 如为法人本人签署(法定代表人),授权信息应包含法人姓名、职务 + 2. 如为非法人签署(代理人),授权信息必须包含: + - 签署人姓名 + - 签署人职位/职务 + - 权限来源(法定代表人授权书、董事会决议、股东会决议等) + - 授权范围(有权签署何种类型的合同、金额上限等) + + 判定标准: + - 法人本人签署:有姓名、职务即可通过 + - 非法人签署:必须包含职位、权限来源、授权范围,否则不通过 + - 草稿阶段授权信息为空时,判定为不通过(提醒补充) + + 请以JSON格式回答:{"passed": true/false, "reason": "签署人授权信息不完整,缺少职位/权限来源/授权范围"} + + uncertainty_handling: + 如合同原文表述模糊、信息缺失或存在歧义: + - 不要自行推断或补充内容 + - 在 reason 中明确标注"原文未明确提及/表述模糊" + - passed 返回 false,并给出"建议补充/明确..."的实操建议 + + schema: + type: object + required: [passed, reason] + properties: + passed: + type: boolean + reason: + type: string + pass_when: "passed == True" + + logic: "1" + + messages: + pass: 合同金额在授权范围内或已报上级审查 + fail: 合同可能超出授权范围 diff --git a/scripts/m4_seed_rules.py b/scripts/m4_seed_rules.py new file mode 100644 index 0000000..c6b53aa --- /dev/null +++ b/scripts/m4_seed_rules.py @@ -0,0 +1,203 @@ +"""M4 种子数据初始化 — 上传全部规则 YAML + 创建入口模块 + 文档类型 + 绑定。 + +用法: cd /home/wren-dev/Porject/leaudit-platform + PYTHONPATH=src:/home/wren-dev/Porject/docauditai \ + python scripts/m4_seed_rules.py +""" +from __future__ import annotations + +import asyncio +import hashlib +import os +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) +sys.path.insert(0, str(Path(__file__).resolve().parent.parent / "src")) +sys.path.insert(0, "/home/wren-dev/Porject/docauditai") + +from fastapi_common.fastapi_common_sqlalchemy.database import GetAsyncSession +from fastapi_common.fastapi_common_storage.oss_client import OssClient +from fastapi_common.fastapi_common_storage.oss_path_utils import OssPathUtils +from sqlalchemy import text + +RULES_DIR = Path(__file__).resolve().parent.parent / "rules" + + +def _read_metadata(yaml_path: Path) -> dict: + import yaml + with open(yaml_path) as f: + data = yaml.safe_load(f) + return data.get("metadata", {}) + + +def _type_id_to_rule_type(type_id: str) -> str: + """type_id → rule_type (rule_sets 表唯一 key)""" + return type_id + + +async def _get_or_create_rule_set( + session, rule_type: str, rule_name: str, domain_type: str, description: str +) -> dict: + result = await session.execute( + text("SELECT * FROM leaudit_rule_sets WHERE rule_type = :rt AND deleted_at IS NULL LIMIT 1"), + {"rt": rule_type}, + ) + row = result.mappings().first() + if row: + return dict(row) + + result = await session.execute( + text( + """INSERT INTO leaudit_rule_sets (rule_type, rule_name, domain_type, description, status, is_builtin) + VALUES (:rt, :rn, :dt, :desc, 'draft', false) + RETURNING id, rule_type, rule_name, domain_type, current_version_id, status""" + ), + {"rt": rule_type, "rn": rule_name, "dt": domain_type, "desc": description or ""}, + ) + return dict(result.mappings().first()) + + +async def _version_exists(session, rule_set_id: int, version_no: str) -> bool: + result = await session.execute( + text("SELECT id FROM leaudit_rule_versions WHERE rule_set_id = :rsid AND version_no = :vn LIMIT 1"), + {"rsid": rule_set_id, "vn": version_no}, + ) + return result.mappings().first() is not None + + +async def upload_one(yaml_path: Path, oss: OssClient) -> dict: + meta = _read_metadata(yaml_path) + type_id = meta.get("type_id", "") + rule_type = _type_id_to_rule_type(type_id) + rule_name = meta.get("name", rule_type) + version_no = meta.get("version", "1.0") + description = meta.get("description", "") + domain_type = type_id.split(".", 1)[0] if "." in type_id else type_id + yaml_text = yaml_path.read_text(encoding="utf-8") + + file_sha256 = hashlib.sha256(yaml_text.encode()).hexdigest() + file_size = len(yaml_text.encode()) + + async with GetAsyncSession() as session: + rs = await _get_or_create_rule_set(session, rule_type, rule_name, domain_type, description) + + if await _version_exists(session, rs["id"], version_no): + return {"rule_type": rule_type, "status": "skipped", "reason": f"version {version_no} exists"} + + # Upload to OSS + object_key = OssPathUtils.BuildRuleYamlKey(rule_type, version_no) + oss_url = oss.UploadText( + ObjectKey=object_key, + Content=yaml_text, + ContentType="application/x-yaml; charset=utf-8", + ) + + # Get next version_seq + seq_result = await session.execute( + text("SELECT COALESCE(MAX(version_seq), 0) + 1 AS ns FROM leaudit_rule_versions WHERE rule_set_id = :rsid"), + {"rsid": rs["id"]}, + ) + next_seq = int(seq_result.mappings().first()["ns"]) + + # Insert version + await session.execute( + text( + """INSERT INTO leaudit_rule_versions ( + rule_set_id, version_no, version_seq, status, source_type, dsl_format, + oss_url, file_sha256, file_size, metadata_type_id, metadata_name, metadata_version + ) VALUES ( + :rsid, :vn, :vs, 'draft', 'oss_yaml', 'yaml', + :url, :sha, :fs, :mtid, :mn, :mv + )""" + ), + { + "rsid": rs["id"], "vn": version_no, "vs": next_seq, + "url": oss_url, "sha": file_sha256, "fs": file_size, + "mtid": type_id, "mn": rule_name, "mv": version_no, + }, + ) + await session.commit() + + return {"rule_type": rule_type, "status": "created", "version": version_no, "oss_url": oss_url} + + +async def publish_one(rule_type: str, version_no: str | None = None) -> dict: + async with GetAsyncSession() as session: + rs = await session.execute( + text("SELECT id FROM leaudit_rule_sets WHERE rule_type = :rt AND deleted_at IS NULL LIMIT 1"), + {"rt": rule_type}, + ) + rs_row = rs.mappings().first() + if not rs_row: + return {"rule_type": rule_type, "status": "error", "reason": "rule_set not found"} + + if version_no: + v = await session.execute( + text("SELECT id FROM leaudit_rule_versions WHERE rule_set_id = :rsid AND version_no = :vn LIMIT 1"), + {"rsid": rs_row["id"], "vn": version_no}, + ) + else: + v = await session.execute( + text("SELECT id FROM leaudit_rule_versions WHERE rule_set_id = :rsid ORDER BY version_seq DESC LIMIT 1"), + {"rsid": rs_row["id"]}, + ) + v_row = v.mappings().first() + if not v_row: + return {"rule_type": rule_type, "status": "error", "reason": "version not found"} + + version_id = int(v_row["id"]) + await session.execute( + text("UPDATE leaudit_rule_versions SET status='published', published_at=now(), updated_at=now() WHERE id=:vid"), + {"vid": version_id}, + ) + await session.execute( + text("UPDATE leaudit_rule_sets SET current_version_id=:vid, status='active', updated_at=now() WHERE id=:rsid"), + {"vid": version_id, "rsid": rs_row["id"]}, + ) + await session.commit() + + return {"rule_type": rule_type, "status": "published", "version_id": version_id} + + +async def main(): + oss = OssClient() + rules_dirs = sorted(d for d in RULES_DIR.iterdir() if d.is_dir() and (d / "rules.yaml").exists()) + + print(f"找到 {len(rules_dirs)} 套规则\n") + + # Step 1: Upload all + print("=" * 60) + print("Step 1: 上传规则 YAML → OSS + 写 DB") + print("=" * 60) + for d in rules_dirs: + yaml_path = d / "rules.yaml" + try: + result = await upload_one(yaml_path, oss) + icon = "✓" if result["status"] != "skipped" else "⊙" + print(f" {icon} {result['rule_type']:40s} {result['status']:8s} v{result.get('version', '?')}") + except Exception as e: + print(f" ✗ {d.name:40s} ERROR: {e}") + + # Step 2: Publish all + print() + print("=" * 60) + print("Step 2: 发布规则版本") + print("=" * 60) + for d in rules_dirs: + meta = _read_metadata(d / "rules.yaml") + type_id = meta.get("type_id", "") + rule_type = _type_id_to_rule_type(type_id) + try: + result = await publish_one(rule_type) + icon = "✓" if result["status"] == "published" else "✗" + print(f" {icon} {rule_type:40s} {result['status']}") + except Exception as e: + print(f" ✗ {rule_type:40s} ERROR: {e}") + + print() + print("完成!") + + +if __name__ == "__main__": + asyncio.run(main())