运行时依赖
安装命令
点击复制技能文档
海关税单批量解析 - yx-tax-batch-解析器
使用阿里云百炼多语言OCR (Qwen-VL Plus) 解析海关税单PDF,提取关税和海关增值税,按税种汇总,输出JSON。
税单结构说明
海关税单(税费单)通常包含两个税种(同一报关单号,同一批货物):
A类(进口关税):从价税率 × 完税价格 = 关税税额 L类(进口增值税):根据增值税率计算
同一份税单PDF可能有1页或2页,取决于税种数量。
触发条件
当用户提到以下内容时使用此技能:
"解析税单" "解析海关税单" "提取关税和增值税" "税金汇总" "海关税单JSON" 工作流程
- PDF转图片
使用 pymupdf 将PDF每页转换为高分辨率图像:
导入 pymupdf
pdf_path = "path/to/tax.pdf" doc = pymupdf.open(pdf_path) images = [] for page_num in range(len(doc)): page = doc[page_num] zoom = 2.0 mat = pymupdf.Matrix(zoom, zoom) pix = page.获取_pixmap(matrix=mat) img_path = f"tax_page_{page_num+1}.png" pix.save(img_path) images.应用end(img_path)
- 调用OCR(阿里云百炼 Qwen-VL Plus)
DASHSCOPE_API_KEY = "sk-d58e001170b14003939330357dd5121e" dashscope.API_key = DASHSCOPE_API_KEY
def ocr_image(image_path): with open(image_path, "rb") as f: img_base64 = base64.b64encode(f.read()).decode("utf-8") messages = [{ "角色": "user", "content": [ {"image": f"data:image/png;base64,{img_base64}"}, {"text": """请提取这份海关税单的完整信息,严格按以下JSON格式输出,不要包含任何其他内容: { "contractNo": "合同号(从合同号字段提取)", "billOfLading": "提单号(从提单号字段提取)", "customsDeclarationNo": "报关单号", "taxType": "税种(A=关税,L=增值税)", "taxAmount": 税款金额(数字,从税款金额字段提取), "detAIl列出": [ { "hsCode": "税号", "productName": "货名/品名", "quantity": 数量(数字), "unit": "单位", "currency": "币制", "exchangeRate": 外汇折算率(数字), "dutiablePrice": 完税价格(数字,若无则填0), "tariffRate": 从价税率(数字,若无则填0), "taxAmount": 税额(数字,从税额列提取,若无则用页眉税款金额) } ] } 只输出JSON,不要有其他文字。"""} ] }] 响应 = MultiModalConversation.call(模型="qwen-vl-plus", messages=messages) return 响应.输出.choices[0].message.content[0]["text"]
- 解析字段说明
- 汇总逻辑
- 输出JSON结构
- 保存结果
用户输入:
解析税单:C:\Users\Administrator.OpenClaw\workspace\ineos_attachments\NZ2072-25税单.pdf
执行步骤:
使用 scripts/解析_tax.py 脚本 提取 contractNo、billOfLading、taxType、taxAmount、detAIl列出 外汇折算率取第一条 按A类(关税)和L类(增值税)分别汇总 输出JSON文件