Install
openclaw skills install @njkahn/license-pre-audit进出口许可文档智能预审系统。支持 PDF 和图片处理:自动提取合同号、出口国、进口商、总金额、数量、重量、合格证编号、生产商、报关口岸等字段,检测公章,按审核规则执行审核,生成 MD 和 JSON 审核报告。支持 CLI 和对话交互两种方式触发。
openclaw skills install @njkahn/license-pre-audit进出口许可文档智能预审系统,支持:
系统将自动解压、提取 PDF、图片 文件目标字段,根据审核规则 执行审核、检测公章,并生成结构化 JSON 报告和 Markdown 表格。
license-pre-audit/
├── SKILL.md # 技能说明
├── references/ # 配置文件
│ ├── audit-rules.json # 审核规则配置
│ ├── doc-types.json # 文档类型配置
│ ├── settings.json # 上传格式、路径、输出路径、触发指令、缓存配置
│ └── demo/ # 示例数据
│ └── test.zip # 示例压缩包
├── assets/ # 运行时数据
│ ├── files/ # 解压文件目录
│ └── reports/ # 报告输出目录
└── src/
├── index.js # 主流程(整合 CLI+ 压缩包 + 表格)
├── prompts/ # Prompt 文件(MD 格式)
│ ├── extract-fields.md # 字段提取 Prompt
│ └── audit-rules.md # 审核规则 Prompt
├── utils/ # 工具函数
│ ├── pdf-ocr.js # PDF/图片文本提取
│ ├── stamp-detect.js # 盖章检测
│ ├── field-normalize.js # 字段标准化
│ ├── extract-archive.js # 压缩包解压
│ ├── generate-table.js # 表格生成
│ └── check-deps.js # 依赖检测与自动安装(新增)
└── rules/ # 11 条审核规则
├── index.js # 规则总入口
├── rule-stamp.js # 规则 1: 盖章检查
├── rule-contract-no.js # 规则 2: 合同号
├── rule-exporter.js # 规则 3: 出口国
├── rule-importer.js # 规则 4: 进口商
├── rule-amount.js # 规则 5: 金额检查
├── rule-quantity.js # 规则 6: 数量检查
├── rule-weight.js # 规则 7: 重量检查
├── rule-mtc-no.js # 规则 8: 合格证编号
├── rule-manufacturer.js # 规则 9: 生产商
├── rule-customs.js # 规则 10: 报关口岸
└── rule-summary.js # 规则 11: 审核摘要
# 审核文件夹中的所有文档
node <技能路径>/src/index.js <许可证文件夹路径>
# 示例(使用内置 demo 文件夹)
node ./src/index.js ../references/demo/test
# 审核压缩包(zip/rar/tar.gz)
node <技能路径>/src/index.js <许可证压缩包路径>
# 示例(使用内置 demo 压缩包)
node ./src/index.js ../references/demo/test.zip
使用步骤:
审核/ 审核许可证 / 许可证( 触发词可在 references/settings.json 中配置 )输出:
audit-result-<timestamp>.jsonaudit-result-<timestamp>.md.zip.rar.tar, .tar.gz, .tgz.pdf.jpg, .jpeg, .png, .webp| 字段 | 说明 | 文档类型 |
|---|---|---|
| contractNo | 合同编号 | contract, form |
| exportCountry | 出口国家 | contract, form |
| importerEn | 进口商英文 | contract, form |
| importerCn | 进口商中文 | contract, form |
| customsPort | 报关口岸 | form |
| mtcNo | 合格证编号 | certificate, form |
| manufacturer | 生产厂商 | certificate, form |
| bussDetial | 货物详情数组 | contract, form |
| totalAmount | 总金额 | contract, form |
| totalQuantity | 总数量 | contract, form |
| totalWeight | 总重量 | contract, form |
| hasStamp | 是否盖章 | certificate |
核心要求:在对话交互模式(压缩包/文件夹上传)下,必须执行以下流程:
index.js 生成 JSON 和 MD 报告文件.md 文件内容console.log 或 console.error 输出表格原因:
console.log/error 输出的内容会被当作纯文本处理,Markdown 格式丢失实现方式:
# 脚本执行后,助手执行:
md_file=$(ls -t assets/reports/audit-result-*.md | head -1)
cat "$md_file" # 读取并发送内容
在聊天界面或控制台直接显示二维表格:
| 检查项 | 申请表 | 合同/合格证 | 预审结果 |
|---|---|---|---|
| 合同编号 | AFT250890 | AFT250890 | ✅ 通过 |
| 出口国 | 中国 | 中国 | ✅ 通过 |
| 进口商(英文) | Stock Company | Stock Company | ✅ 通过 |
| 总金额 | 47060 | ¥47,060.00 | ✅ 通过 |
| 总数量 | 180千克 | 1 lot | ❌不通过 |
| 合格证编号 | 2025032601,028119877 | 2025032601 | ✅ 通过 |
| 生产商 | 江苏国强镀锌实业有限公司 | 江苏国强镀锌实业有限公司 | ✅ 通过 |
| 盖章情况 | 已盖章 | 已盖章 | ✅ 通过 |
横向: 申请表 | 合同/合格证 | 预审结果
纵向: 9 个检查项(合同编号、出口国、进口商、总金额、总数量、合格证编号、生产商、报关口岸、盖章情况)
上面是表格,表格下面是 整体结果 和 详细审核说明。
{
"timestamp": "2026-04-13T06:01:19.853Z",
"folder": "../references/demo/test",
"totalFiles": 3,
"processedFiles": 3,
"auditResults": [
{
"filename": "SC NO.JYIE-2025-137.pdf",
"docType": "合同",
"extractedFields": {
"contractNo": "JYIE-2025-137",
"exportCountry": "中国",
"importerEn": "RAMATEX TEXTILES INDUSTRIAL SDN,BHD",
"importerCn": "马来西亚利玛纺织有限公司",
"totalAmount": "CNY980,000.00",
"totalQuantity": "1 lot",
"totalWeight": "",
"bussDetial": [
{
"commodity": "Air condition system 空调系统",
"quantity": "1 lot",
"weight": "",
"unitPrice": "980000 CNY",
"amount": "980000 CNY"
}
]
},
"hasStamp": true
},
{
"filename": "angle bar.jpg",
"docType": "合格证",
"extractedFields": {
"mtcNo": "2025032601",
"manufacturer": "江苏国强镀锌实业有限公司"
},
"hasStamp": true
},
{
"filename": "b699b609-cfa3-4de1-bc16-65a65d6f2ab8.png",
"docType": "申请表",
"extractedFields": {
"contracNo": "JYIE-2025-137",
"exportCountry": "中国",
"importerCn": "马来西亚利玛纺织有限公司",
"importerEn": "RAMATEX TEXTILES INDUSTRIAL SDN BHD",
"customsPort": "上海海关",
"bussDetial": [
{
"commodity": "角钢(除名加工外未经进一步加工)",
"quantity": "180 千克",
"unitPrice": "55 人民币元",
"amount": "990 人民币元"
}
],
"totalAmount": "980000 人民币元",
"totalQuantity": "180 千克",
"mtcNo": "2025032601,028119877",
"manufacturer": "江苏国强镀锌实业有限公司"
},
"hasStamp": true
}
],
"auditSummary": {
"reviewResult": "整体审核结果:建议不通过",
"reviewDetail": "1. 合同编号一致:JYIE-2025-137\n2. 出口国一致:中国\n3. 进口商英文名称一致:RAMATEX TEXTILES INDUSTRIAL SDN,BHD\n5. 合格证编号一致:2025032601\n6. 生产商信息一致:江苏国强镀锌实业有限公司\n7. 货物详情不一致\n8. 价格总计高度相似:CNY980,000.00 vs 980000 人民币元\n9. 货物总量不一致\n\n不通过项共 2 项。",
"sign": {
"reviewResult": "通过",
"reviewDetail": "合同已盖章。合格证已盖章"
},
"contracNo": {
"reviewResult": "通过",
"reviewDetail": {
"formdata": "JYIE-2025-137",
"attachdata": "JYIE-2025-137"
}
},
"exporter": {
"reviewResult": "建议通过,需人工复审",
"reviewDetail": {
"formdata": "中国",
"customsPort": "上海海关",
"attachdata": "中国"
},
"note": "出口国为中国,报关口岸非保税区,需复核。"
},
"importerEn": {
"reviewResult": "通过",
"reviewDetail": {
"formdata": "RAMATEX TEXTILES INDUSTRIAL SDN BHD",
"attachdata": "RAMATEX TEXTILES INDUSTRIAL SDN,BHD"
},
"note": "进口商名称高度相似(空格/后缀差异),视为一致"
},
"bussDetial": {
"reviewResult": "不通过",
"reviewDetail": {
"formdata": "未匹配",
"attachdata": "未匹配"
}
},
"totalAmount": {
"reviewResult": "建议通过,需人工复审",
"reviewDetail": {
"formdata": "980000 人民币元",
"attachdata": "CNY980,000.00"
},
"note": "金额高度相似,建议通过但需人工确认"
},
"totalQuantity": {
"reviewResult": "不通过",
"reviewDetail": {
"formdata": "180 千克",
"attachdata": "1 lot"
},
"note": "数量不一致"
},
"mtcNo": {
"reviewResult": "通过",
"reviewDetail": {
"formdata": "2025032601,028119877",
"attachdata": "2025032601"
},
"note": "申请表包含多个合格证编号"
},
"manufacturer": {
"reviewResult": "通过",
"reviewDetail": {
"formdata": "江苏国强镀锌实业有限公司",
"attachdata": "江苏国强镀锌实业有限公司"
}
}
}
}
references/settings.json 中自定义触发词(跨平台通用)