为确保同一份合同每次审核结果一致,本Skill采用以下固化机制:
使用 references/extract_contract.py 脚本标准化提取合同文本:
提交审核的合同必须满足以下条件:
| 要求 | 说明 |
|------|------|
| 格式 | 支持 .docx, .pdf, .txt, .md |
| 编码 | UTF-8 |
| 修订痕迹 | 禁止有Track Changes痕迹的文档 |
| 加密 | 不支持加密的文档 |
| 扫描件 | PDF必须是可搜索文本,OCR扫描件不支持 |
# 使用固化脚本提取文本
python references/extract_contract.py <合同文件路径>
# 输出示例:
{
"file_name": "销售合同.docx",
"content_hash": "a1b2c3d4...", # 可用于验证一致性
"paragraph_count": 45,
"text": "合同正文..."
}
每次提取后,检查 content_hash 值:
本Skill用于对销售合同进行专业审核。审核视角为乙方(卖方)视角,从乙方利益出发检查合同中的潜在风险。
当用户提交合同文本进行审核时,输出HTML格式的结构化审核报告,包括:
审查销售合同时,应依次判断以下四个层面(从乙方视角):
审核合同时,详细参考 references/audit_points.md 中的审核要点。
必须使用固化脚本提取文本,确保一致性:
# 在skill目录下执行
python references/extract_contract.py <合同文件路径>
提取后的JSON输出中,text字段即为标准化后的合同文本。
references/audit_points.md 作为审核依据
content_hash 值确认文本未被修改
> 核心原则:生成的HTML报告必须完全匹配 references/report_template.html 的结构和样式。CSS必须内联在 标签中,确保报告文件自包含、可独立打开。
以下CSS已固化,每次生成报告时必须原样复制到 标签中,不得修改任何值:
:root{--primary:#2563eb;--primary-light:#3b82f6;--text-primary:#1f2937;--text-secondary:#6b7280;--bg-light:#f9fafb;--border:#e5e7eb;--risk-high:#dc2626;--risk-high-bg:#fef2f2;--risk-medium:#f59e0b;--risk-medium-bg:#fffbeb;--risk-low:#10b981;--risk-low-bg:#ecfdf5;--adv-bg:#eff6ff;--adv-border:#3b82f6;--white:#fff;--shadow:0 1px 3px rgba(0,0,0,0.1)}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:14px;line-height:1.7;color:var(--text-primary);background:#f3f4f6;padding:20px}
.report-container{max-width:900px;margin:0 auto;background:var(--white);border-radius:8px;box-shadow:var(--shadow);overflow:hidden}
.report-header{background:linear-gradient(135deg,var(--primary),var(--primary-light));color:white;padding:30px 40px;text-align:center}
.report-header h1{font-size:28px;font-weight:600;margin-bottom:15px;letter-spacing:2px}
.report-meta{display:flex;justify-content:center;gap:30px;font-size:13px;opacity:0.9;flex-wrap:wrap}
.report-content{padding:30px 40px}
section{margin-bottom:32px}
section h2{font-size:18px;font-weight:600;color:var(--text-primary);padding-bottom:10px;border-bottom:2px solid var(--primary);margin-bottom:20px}
.summary-table{width:100%;border-collapse:collapse;font-size:13px}
.summary-table th,.summary-table td{padding:10px 14px;text-align:left;border:1px solid var(--border)}
.summary-table th{background:var(--primary);color:white;font-weight:600;text-align:center;font-size:12px}
.summary-table tbody tr:nth-child(odd){background:var(--bg-light)}
.summary-table tbody tr:hover{background:#f0f7ff}
.summary-table td{color:var(--text-secondary)}
.summary-table td:first-child{width:13%}
.summary-table td:nth-child(2){width:14%}
.risk-item{padding:14px 20px;margin-bottom:14px;border-radius:6px;border-left:4px solid var(--risk-high);background:var(--risk-high-bg)}
.risk-item.medium{background:var(--risk-medium-bg);border-color:var(--risk-medium)}
.risk-item.low{background:var(--risk-low-bg);border-color:var(--risk-low)}
.risk-header{display:flex;align-items:center;gap:10px;margin-bottom:6px;flex-wrap:wrap}
.risk-level{display:inline-block;padding:2px 8px;border-radius:4px;font-size:10px;font-weight:600;text-transform:uppercase;background:var(--risk-high);color:white}
.risk-level.medium{background:var(--risk-medium);color:white}
.risk-level.low{background:var(--risk-low);color:white}
.risk-title{font-weight:600;color:var(--text-primary);font-size:14px}
.risk-clause{font-size:11px;color:#8b5cf6;margin-left:6px;white-space:nowrap}
.risk-dimension{font-size:11px;color:var(--text-secondary);margin-left:auto}
.risk-description{color:var(--text-secondary);font-size:13px;margin-top:4px}
.suggestion-item{padding:14px 20px;margin-bottom:14px;background:var(--bg-light);border-radius:6px;border-left:3px solid var(--primary)}
.suggestion-header{font-weight:600;color:var(--text-primary);margin-bottom:6px;font-size:14px}
.suggestion-content{color:var(--text-secondary);font-size:13px}
.suggestion-content ul{margin-left:18px;margin-top:4px}
.suggestion-content li{margin-bottom:3px}
.advantage-item{padding:9px 14px;margin-bottom:6px;background:var(--adv-bg);border-radius:4px;border-left:3px solid var(--adv-border);font-size:13px;color:var(--text-secondary)}
.advantage-item strong{color:var(--primary)}
.note-item{padding:9px 14px;margin-bottom:6px;background:#fefce8;border-radius:4px;border-left:3px solid #eab308;font-size:13px;color:var(--text-secondary)}
.clause-item{margin-bottom:18px;border:1px solid var(--border);border-radius:6px;overflow:hidden}
.clause-header{background:var(--bg-light);padding:11px 18px;font-weight:600;font-size:13px;border-bottom:1px solid var(--border)}
.clause-content{padding:16px 18px;background:white;font-size:13px;line-height:1.8}
.clause-content pre{white-space:pre-wrap;word-wrap:break-word;background:#f8f9fa;padding:14px;border-radius:4px;overflow-x:auto;font-size:12px}
.conclusion-box{background:var(--bg-light);border-radius:8px;padding:20px;border:1px solid var(--border)}
.conclusion-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px;padding-bottom:14px;border-bottom:1px solid var(--border)}
.conclusion-label{font-size:16px;font-weight:600;color:var(--text-primary)}
.conclusion-rating{padding:4px 14px;border-radius:20px;font-size:13px;font-weight:600}
.conclusion-rating.low{background:var(--risk-low-bg);color:var(--risk-low)}
.conclusion-rating.medium{background:var(--risk-medium-bg);color:var(--risk-medium)}
.conclusion-rating.high{background:var(--risk-high-bg);color:var(--risk-high)}
.conclusion-content{color:var(--text-secondary);font-size:14px;line-height:1.8;margin-bottom:18px}
.conclusion-content p{margin-bottom:10px}
.conclusion-content ul{margin-left:18px}
.conclusion-content li{margin-bottom:4px}
.conclusion-signature{display:flex;gap:30px;padding-top:14px;border-top:1px dashed var(--border)}
.signature-item{display:flex;align-items:center;gap:8px}
.signature-label{font-size:12px;color:var(--text-secondary)}
.signature-value{font-weight:600;color:var(--text-primary);font-size:13px}
.report-footer{background:var(--bg-light);padding:18px 40px;text-align:center;color:var(--text-secondary);font-size:11px;border-top:1px solid var(--border)}
@media print{body{background:white;padding:0}.report-container{box-shadow:none}.report-header{-webkit-print-color-adjust:exact;print-color-adjust:exact}.risk-item,.risk-level{-webkit-print-color-adjust:exact;print-color-adjust:exact}}
@media(max-width:768px){.report-header{padding:20px}.report-meta{flex-direction:column;gap:8px}.report-content{padding:20px}.summary-table{font-size:11px}.summary-table th,.summary-table td{padding:7px 8px}.conclusion-signature{flex-direction:column;gap:8px}}
以下HTML DOM结构已固化,每次生成报告时必须严格遵循,不得添加或删除任何class属性。变量 {{...}} 替换为实际内容。
<body>
<div class="report-container">
<header class="report-header">
<h1>销售合同审核报告</h1>
<div class="report-meta">
<span>审核日期:{{audit_date}}</span>
<span>合同名称:{{contract_name}}</span>
<span>审核视角:乙方(卖方)</span>
</div>
</header>
<div class="report-content">
<!-- 注意:section 标签无 class 属性 -->
<!-- 一、合同要点总结 -->
<section>
<h2>一、合同要点总结</h2>
<table class="summary-table">...</table>
</section>
<!-- 二、潜在风险点 -->
<section>
<h2>二、潜在风险点(仅列出对乙方不利的条款)</h2>
<!-- 风险项 -->
</section>
<!-- 三、修改建议 -->
<section>
<h2>三、修改建议</h2>
<!-- 修改建议项 -->
</section>
<!-- 四、参考条款 -->
<section>
<h2>四、参考条款</h2>
<!-- 参考条款项 -->
</section>
<!-- 五、审核结论 -->
<section>
<h2>五、审核结论</h2>
<div class="conclusion-box">...</div>
</section>
</div>
<footer class="report-footer">
<p>本报告仅供参考,不构成法律意见。具体合同条款的效力及风险需结合实际情况判断,建议咨询专业律师。</p>
</footer>
</div>
</body>
3.1 合同要点总结表格(4列):
| 类别 | 项目 | 内容 | 乙方视角评价 |
|------|------|------|-------------|
| 合同主体 | 甲方(买方) | [名称] | 留空 |
| 合同主体 | 乙方(卖方) | [名称] | 留空 |
| 合同标的 | 标的名称 | [产品/服务内容] | 留空 |
| 合同金额 | 合同总价 | [金额],是否含税 | 留空 |
| 付款条件 | 付款方式 | 预付款[X]%+验收款[X]%+质保金[X]% | 有风险时标注,如style="color:#f59e0b;" |
| 付款条件 | 付款节点 | [具体时间节点] | 有风险时标注,无风险留空 |
| 付款条件 | 发票要求 | [每个阶段需提供的发票类型和金额] | 付款与发票金额不一致时标注中风险 |
| 合同变更 | 变更原则 | [合同变更程序和审批要求,原文引用] | 有风险时标注 |
| 合同变更 | 变更计价 | [变更时的计价方式和标准,原文引用] | 有风险时标注 |
| 交付安排 | 交付时间 | [期限] | 留空 |
| 交付安排 | 验收期 | [期限及起始条件] | 留空 |
| 质保安排 | 质保期 | [期限及起始条件] | 留空(质保起算日已合并至此行) |
| 合同期限 | 生效条件 | [生效条件] | 留空 |
| 合同期限 | 终止条件 | [终止条件] | 留空 |
| 争议解决 | 管辖约定 | [仲裁/诉讼 + 管辖地] | 非乙方所在地时标注风险 |
| 违约责任 | 甲方违约责任 | [原文引用,包括所有相关条款] | 留空(甲方违约责任重对乙方有利) |
| 违约责任 | 乙方违约责任 | [原文引用,包括所有相关条款] | 有风险时标注 |
| 违约责任 | 发票违约责任 | [原文引用,如:乙方未按期提供发票应承担的责任] | 有风险时标注 |
| 违约责任 | 单边违约风险 | [是否存在单边违约风险的判断结果] | 有风险时标注 |
3.2 潜在风险点(每个风险项的HTML结构):
<div class="risk-item [medium|low]">
<div class="risk-header">
<span class="risk-level [medium|low]">[高风险|中风险|低风险]</span>
<span class="risk-title">[风险标题]</span>
<span class="risk-clause">[第X条]</span>
<span class="risk-dimension">[审查维度]</span>
</div>
<div class="risk-description">
[风险详细描述]
</div>
</div>
> 风险等级说明:
> - 高风险:使用 class="risk-item"(默认红色,不加high类名)
> - 中风险:使用 class="risk-item medium"
> - 低风险:使用 class="risk-item low"
> - 每个风险项必须标注条款位置(risk-clause)和审查维度(risk-dimension)
3.3 修改建议(每个建议项的HTML结构):
<div class="suggestion-item">
<div class="suggestion-header">建议N:[简述]([风险等级] → 对应修改)</div>
<div class="suggestion-content">
<ul>
<li><strong>修改内容:</strong>[具体修改方案]</li>
<li><strong>备选方案:</strong>[如有]</li>
<li><strong>法律依据:</strong>[相关法律条款]</li>
</ul>
</div>
</div>
3.4 参考条款(每个条款的HTML结构):
<div class="clause-item">
<div class="clause-header">参考条款N:[标题]</div>
<div class="clause-content">
<pre>[标准条款文本]</pre>
</div>
</div>
3.5 审核结论(完整结构,必须包含以下6个部分):
<div class="conclusion-box">
<div class="conclusion-header">
<span class="conclusion-label">综合风险评级</span>
<span class="conclusion-rating [low|medium|high]">[低风险|中风险|高风险]</span>
</div>
<div class="conclusion-content">
<p><strong>整体评价:</strong>[从乙方视角的整体评价]</p>
<p><strong>乙方优势条款(建议保留):</strong></p>
<div class="advantage-item"><strong>✓ [优势标题]:</strong>[说明]</div>
<!-- 可多个 advantage-item -->
<p><strong>可优化项(N项,均非签约前提):</strong></p>
<ul>
<li><strong>[风险等级](N项):</strong>[可优化项说明]</li>
</ul>
<p><strong>履约注意事项:</strong></p>
<div class="note-item"><strong>[注意事项标题]:</strong>[详细说明]</div>
<!-- 可多个 note-item -->
<p><strong>签约建议:</strong>[最终建议]</p>
</div>
<div class="conclusion-signature">
<div class="signature-item">
<span class="signature-label">审核人:</span>
<span class="signature-value">AI合同审核系统</span>
</div>
<div class="signature-item">
<span class="signature-label">审核日期:</span>
<span class="signature-value">{{audit_date}}</span>
</div>
</div>
</div>
| 元素 | CSS变量/颜色 | 用途 |
|------|-------------|------|
| 主题色 | --primary: #2563eb | 标题栏背景、表头、h2底部边框 |
| 标题栏渐变 | --primary-light: #3b82f6 | 报告头部渐变 |
| 高风险 | --risk-high: #dc2626 | 红色,高风险标识 |
| 高风险背景 | --risk-high-bg: #fef2f2 | 淡红背景 |
| 中风险 | --risk-medium: #f59e0b | 橙色,中风险标识 |
| 中风险背景 | --risk-medium-bg: #fffbeb | 淡黄背景 |
| 低风险 | --risk-low: #10b981 | 绿色,低风险标识 |
| 低风险背景 | --risk-low-bg: #ecfdf5 | 淡绿背景 |
| 条款定位 | #8b5cf6 | 紫色,条款位置标注 |
| 优势项背景 | --adv-bg: #eff6ff | 淡蓝背景 |
| 优势项边框 | --adv-border: #3b82f6 | 蓝色左边框 |
| 注意项背景 | #fefce8 | 淡黄背景 |
| 注意项边框 | #eab308 | 黄色左边框 |
| 正文字色 | --text-primary: #1f2937 | 标题、正文主要颜色 |
| 次要文字 | --text-secondary: #6b7280 | 描述文字颜色 |
| 字体 | -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto | 系统字体栈 |
生成报告前必须逐项确认:
标签没有任何class属性
medium,低风险=low
从乙方视角审核违约责任时,必须包含以下内容:
审核违约责任时,必须从合同全文中搜索并引用所有相关条款,包括但不限于:
必须审核并列出以下发票相关违约责任(从合同原文引用):
| 发票违约情形 | 违约责任(原文引用) |
|-------------|---------------------|
| 乙方未正常纳税 | 乙方应承担由此给甲方造成的一切损失,包括但不限于未抵扣税额、逾期滞纳金、税款罚金等 |
| 乙方未按期提供发票 | 同上 |
| 乙方提供发票不合规 | 同上 |
注意:发票违约责任是乙方责任,属于对乙方不利的风险点,应在违约责任审核中明确列出。
如果合同中包含变更原则条款(如合同变更程序、变更审批流程、变更计价方式等),必须在合同要点总结中补充:
| 类别 | 项目 | 内容 |
|------|------|------|
| 合同变更 | 变更原则 | [引用合同原文的变更条款,如:需按甲方《深圳市机场(集团)有限公司建设工程变更管理规定》相关程序办理] |
| 合同变更 | 变更计价方式 | [引用合同原文的变更计价方式] |
必须审核付款金额与增值税专用发票金额是否一致:
示例:
必须判断合同是否存在"单边违约风险":
| 风险类型 | 判断标准 | 风险等级 |
|---------|---------|---------|
| 甲方违约责任过轻 | 甲方违约(如逾期付款、任意解除合同)无对应违约责任或责任极轻 | 中风险 |
| 乙方违约责任过重 | 乙方违约金比例高于甲方,或乙方违约后果严重于甲方 | 中风险 |
| 单边解除权 | 甲方有权任意解除合同,但乙方无对等解除权 | 高风险 |
| 单边变更权 | 甲方有权单方变更合同内容,但乙方无对等权利 | 中风险 |
从合同全文中识别单边违约风险的要点:
报告中的所有数字必须从合同原文中直接引用,严禁推断、换算或自行计算。
审核合同时,乙方信息可能以多种形式出现,必须正确识别以下所有格式:
| 格式 | 示例 |
|------|------|
| 受托方(乙方) | 受托方(乙方):中科星图股份有限公司 |
| 乙方(卖方) | 乙方(卖方):xxx公司 |
| 供应商 | 供应商:xxx公司 |
| 承包方 | 承包方:xxx公司 |
| 格式 | 示例 |
|------|------|
| 乙方1+乙方2联合体 | 乙方1(联合体牵头单位):xxx公司、乙方2(联合体成员单位):xxx公司 |
| 受托方(乙方1)+受托方(乙方2) | 受托方(乙方1):xxx公司、受托方(乙方2):xxx公司 |
| 乙方(联合体牵头单位)+乙方(联合体成员单位) | 乙方(联合体牵头单位):xxx公司、乙方(联合体成员单位):xxx公司 |
付款信息通常位于合同第3条或"合同价格及支付方式"章节,必须完整提取。
付款金额、付款比例、付款条件、付款节点必须整合在一起作为"付款方式"呈现,不能分开列为多个项目。
每个付款阶段应整合呈现为以下格式:
① 付款比例(付款金额):付款条件 + 需提交的材料
示例格式:
① 30%(1,368,540.00元):合同签订30日后,需提交"买方收到业主方相应款项证明材料"+发票+设备到货报告
② 40%(1,824,720.00元):初验完成30日后,需提交"买方收到业主方相应款项证明材料"+初验合格说明
③ 30%(1,368,540.00元):终验完成30日后,需提交终验合格说明+质保书
所有金额、比例必须与合同原文完全一致,严禁换算或简写:
| 正确做法 | 错误做法 |
|----------|----------|
| 合同签订价的50% | 50% |
| 人民币4,520,000.00元 | 452万 |
| 累计支付至合同结算金额的95% | 95% |
| 合同结算金额的100% | 100% |
| 增值税专用发票 | 专票 |
| 要素 | 说明 | 示例 |
|------|------|------|
| 付款阶段 | 付款的阶段序号 | 第1期、第2期、第3期 |
| 付款比例 | 该阶段付款占总价的比例(原文引用) | 合同签订价的50%、累计至合同结算金额的95% |
| 付款金额 | 该阶段实际付款金额(原文引用或计算) | 2,260,000.00元(合同签订价452万元×50%)|
| 付款条件 | 该阶段付款的前提条件 | 完成需求调研、系统深化设计、硬件到货等 |
| 付款节点 | 时间节点/触发条件 | 合同签订后、验收合格后、质保期满后 |
| 发票要求 | 该阶段需要提供的发票类型和金额 | 合同签订价50%的增值税专用发票 |
合同原文示例(第3.7条):
3.7 支付方式及进度:
付款阶段 付款比例 付费方式
1 合同签订价的 50% 完成需求调研、系统深化设计、硬件到货及施工完成,系统完成核心功能上线及进入试运行一阶段。乙方提供付款书面申请和合同签订价 50% 的增值税专用发票并经甲方审核无误后 20 个工作日内支付。
2 合同签订价的 30% 完成系统完成主要的功能开发,试运行一阶段稳定,完成初验。乙方提供付款书面申请和合同签订价 30% 的增值税专用发票并经甲方审核无误后 20 个工作日内支付。
3 累计支付至合同结算金额的 95% 系统功能开发完成,运行二阶段稳定,且终验通过,完成项目结算和资产入固。乙方提供付款书面申请和累计至合同结算金额 100% 的增值税专用发票并经甲方审核无误后 20 个工作日内支付。
4 累计支付至合同结算金额的 100% 系统在质保期内运行正常,在质保期结束后,乙方按合同约定履行完毕全部质保期服务且无任何质量缺陷,没有发生本合同规定的抵扣、扣除质保金的任何情况,乙方提供付款书面申请和等额收据并经甲方审核无误后 20 个工作日内支付。
正确提取结果(整合呈现):
付款方式:
① 合同签订价的50%(2,260,000.00元):完成需求调研、系统深化设计、硬件到货及施工完成,系统完成核心功能上线及进入试运行一阶段。乙方提供付款书面申请和合同签订价50%的增值税专用发票并经甲方审核无误后20个工作日内支付。
② 合同签订价的30%(1,356,000.00元):完成系统主要功能开发,试运行一阶段稳定,完成初验。乙方提供付款书面申请和合同签订价30%的增值税专用发票并经甲方审核无误后20个工作日内支付。
③ 累计支付至合同结算金额的95%:系统功能开发完成,运行二阶段稳定,且终验通过,完成项目结算和资产入固。乙方提供付款书面申请和累计至合同结算金额100%的增值税专用发票并经甲方审核无误后20个工作日内支付。
④ 累计支付至合同结算金额的100%:质保期结束后,乙方履行完毕全部质保期服务且无任何质量缺陷。乙方提供付款书面申请和等额收据并经甲方审核无误后20个工作日内支付。
"风险"的定义:仅指对乙方(卖方)不利的条款。 识别风险时必须严格遵循以下原则:
| 类型 | 示例 | 理由 |
|------|------|------|
| 乙方义务过重 | 乙方违约金过高、质保期过长 | 损害乙方利益 |
| 乙方权利缺失 | 缺少默示验收条款、无所有权保留 | 乙方缺少保护 |
| 甲方权利过大 | 甲方任意解除权、单方变更权 | 乙方处于被动 |
| 乙方收款障碍 | 背靠背付款、付款节点模糊 | 影响乙方回款 |
| 管辖不利 | 管辖地不在乙方所在地 | 增加维权成本 |
| 类型 | 示例 | 理由 |
|------|------|------|
| 甲方义务过重 | 甲方逾期付款违约金高(如0.8%/日) | 对乙方有利,有助于保障乙方收款 |
| 甲方权利受限 | 甲方验收期短、甲方不得转授权 | 有利于乙方 |
| 乙方权利充分 | 乙方知识产权保留、乙方可中止服务 | 乙方优势条款 |
| 对乙方有利的不对等 | 付款比例对乙方有利(如70%预付款) | 商业谈判优势 |
| 标准商业惯例 | 合同签字盖章即生效(无需与预付款挂钩) | 标准商业操作,签署即生效为通行做法 |
| 标准商业惯例 | 验收条款不强制区分初验/终验 | 默示验收条款已覆盖全部验收,无需单独定义终验 |
共 1 个版本