Install
openclaw skills install @jreadstone/imp-trm-accstmt银行对账单转换为各系统标准银行账户流水导入模板的技能。当用户需要将银行对账单文件(MT940格式的SWIFT银行对账单、国内各银行的Excel格式对账单、或PDF格式对账单)转换为BIPV5、金蝶云星瀚(EAS_YXH)、保融ATS(FINGARD)、九恒星司库(NSTC)、用友NCC(YYNCC)等系统的标准导入模板时,**必须使用此技能**。
**核心功能**:解析MT940/Excel/PDF格式银行对账单 → 智能字段映射 → 生成对应系统标准Excel/xls导入模板
**支持的目标系统**:
- **BIPV5**(默认):银行流水处理 Excel 模板
- **EAS_YXH**(金蝶云星瀚):离线明细导入 .xlsx 模板
- **FINGARD**(保融ATS):离线信息 .xls 模板
- **NSTC**(九恒星司库):批量导入银行明细格式 .xls 模板
- **YYNCC**(用友NCC):数据页签 .xls 模板
**必须触发场景**:
- "银行对账单转换"、"MT940解析"、"银行流水导入模板"
- "境外银行对账单"、"SWIFT对账单处理"、"生成BIP导入文件"
- "PDF对账单转换"、"PDF银行流水"、"银行PDF导入"
- "转换为金蝶云星瀚模板"、"EAS_YXH导入"、"金蝶流水导入"
- "转换为保融ATS"、"FINGARD对账单"、"保融流水导入"
- "转换为九恒星"、"NSTC导入"、"九恒星司库流水"
- "转换为用友NCC"、"Yonyou NCC导入"、"NC流水"
- "bank statement import"、"MT940 to BIP"、"PDF to BIP"
- 处理MT940格式(TXT/STA文件)的银行对账单
- 国内银行Excel格式对账单转换(如招商银行、中信银行、兴业银行等)
- 国内银行PDF格式对账单转换(如农商行、平安银行、恒丰银行、浙商银行、郑州银行等)
- 批量转换多银行对账单生成导入模板(合并为单个文件)
- 将银行流水数据导入到BIPV5、金蝶云星瀚、保融ATS、九恒星司库、用友NCC等系统
- 处理对账单中账号与交易明细分离的情况
- 当用户提到银行对账单、MT940、SWIFT、银行流水、账户流水、PDF对账单、金蝶/保融/九恒星/用友等关键词时
**输出位置**:默认情况下,输出文件将保存在与输入文件相同的目录中,保持数据同位置管理。
**特性说明**:
- 支持MT940格式解析(SWIFT标准银行对账单)
- 支持国内各银行Excel格式对账单(招商、中信、兴业、浦发、民生、徽商、广西北部湾、渤海、国开、中原等)
- **支持国内各银行PDF格式对账单**(文本型PDF + 可选OCR支持图片型PDF)
- 内置余弦相似度算法智能匹配字段(自动处理列名差异)
- 支持对方账号/对方名称的多种别名匹配(对方账号、对手账号、收款账号等)
- 可配置的JSON映射文件支持灵活扩展新的银行格式和目标系统
- 支持借贷标识自动分离、日期格式转换、币种处理
- 支持从表头区域自动提取本方账号信息
- 自动清理账号中的币种标识(如"账号(人民币)"自动处理)
- PDF解析支持多种列头折行格式(如"交易时"+"间" → "交易时间")
- PDF解析使用PyMuPDF的X/Y位置信息按列重组表格(不依赖固定列数)
- 5 个目标系统的输出严格遵循各自模板格式(EAS_YXH 保留单元格批注和下拉项;FINGARD/NSTC/YYNCC 保留说明 sheet 和对照表)
**注意**:本技能通过可配置的映射文件支持灵活扩展新的银行格式和目标系统,无需修改代码即可适应新的对账单格式。
**模板文件加载策略(兼容 clawhub 等不支持上传二进制模板的市场)**:
- 5 个目标系统的导入模板位于 assets/template/ 目录下:
- YYBIPV5_banktransaction.xlsx — BIPV5
- eas_yxh_banktransaction.xlsx — 金蝶云星瀚
- fingard_banktransaction.xls — 保融ATS
- nstc_banktransaction.xls — 九恒星司库
- yyncc_banktransaction.xls — 用友NCC
- 当用户基于 clawhub 之类的市场安装本 skill,且 assets/template/ 目录下缺失对应模板文件时,会自动从预配置的互联网地址下载到本地使用。
- 模板加载统一入口:scripts/core/template_manager.py::resolve_template(target_system)。
openclaw skills install @jreadstone/imp-trm-accstmt将银行对账单文件(MT940格式、国内银行Excel格式或PDF格式)转换为目标系统的标准银行账户流水导入模板。
单文件转换:
请将 平安银行.pdf 银行对账单转换为 目标 系统的导入模板
批量合并转换(将目录下所有对账单合并为单个文件):
将当前目录下所有银行对账单(MT940、Excel和PDF格式)合并转换为一个目标系统的导入模板
将以下银行对账单转换为 BIPV5 系统导入模板:
- 输入文件:/path/to/平安银行.pdf
- 输出文件:/path/to/output/BIPV5_平安银行.xlsx
- 目标系统:BIPV5
- 账户组织编码:ORG001
- 银行名称:平安银行
| 转换模式 | 默认输出位置 |
|---|---|
| 单文件转换 | 与输入文件相同目录 |
| 批量合并转换 | 与输入目录相同位置 |
| 指定输出路径 | 用户指定路径 |
输出文件名格式:
{原文件名}_BIPV5.xlsxmerged_BIPV5.xlsx┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 输入文件 │───▶│ 格式解析器 │───▶│ 数据映射器 │───▶│ 输出生成器 │
│ (MT940/Excel/ │ │ (Parser) │ │ (Mapper) │ │ (Excel) │
│ PDF) │ │ │ │ │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
▼ ▼ ▼
parsers/ mappings/ 输出文件
mt940_parser.py mt940_to_bipv5.json BIPV5_银行流水.xlsx
excel_parser.py
pdf_parser.py
| 字段代码 | 中文名称 | 必填 | 说明 |
|---|---|---|---|
| accentity_code | 账户使用组织编码 | 否 | 组织编码 |
| bankaccount_account | *银行账号 | 是 | 银行账号 |
| bankNumber_name | 银行名称 | 否 | 开户行名称 |
| bank_seq_no | *本方交易流水号 | 是 | 银行流水序号 |
| tran_date | *交易日期 | 是 | 交易日期YYYY-MM-DD |
| tran_time | 交易时间 | 否 | 交易时间HH:MM:SS |
| dc_flag | 借贷标识 | 否 | C=贷,D=借 |
| debitamount | 支出金额 | 否 | 借方发生额 |
| creditamount | 收入金额 | 否 | 贷方发生额 |
| currency_name | *币种 | 是 | ISO币种代码 |
| tran_amt | 金额 | 否 | 交易金额 |
| to_acct_no | 对方账号 | 否 | 交易对方账号 |
| to_acct_name | 对方户名 | 否 | 交易对方名称 |
| to_acct_bank_name | 对方银行名称 | 否 | 对方银行 |
| use_name | 用途 | 否 | 资金用途 |
| remark | 摘要 | 否 | 交易摘要 |
| remark01 | 附言 | 否 | 附加说明 |
| acct_bal | 余额 | 否 | 账户余额 |
MT940格式关键字段映射:
| MT940 Tag | 说明 | 示例 |
|---|---|---|
| :20: | 交易参考号 | STMT24010001 |
| :25: | 账号识别 | 1234567890 |
| :28C: | 语句编号 | 1/1 |
| :60F: | 期初余额 | D240101USD1000,00 |
| :61: | 交易记录 | 日期+借贷+金额 |
| :86: | 交易详情 | 对方名称等 |
| :62F: | 期末余额 | C240131USD1500,00 |
双模式支持:
page.get_text() 直接提取文字位置信息驱动:使用 PyMuPDF 的 X/Y 坐标信息按列重组表格,不依赖固定列数
列头归一化:智能处理多种列头折行格式:
交易时 + 间 → 交易时间)贷方发 + 生额(收 + 入) → 贷方发生额(收入))发生金额(元) → 发生金额)可插拔OCR接口:
from scripts.parsers.pdf_parser import PDFParser, TesseractOCR
parser = PDFParser()
parser.set_ocr_backend(TesseractOCR()) # 注入 Tesseract OCR
data = parser.parse('image_based.pdf')
多页PDF自动合并:跨页交易表自动识别(按 Y 坐标分组、按 X 坐标排序列)
scripts/parsers/ 目录创建新的解析器文件BaseParser 类parse() 和 detect_format() 方法scripts/core/parser_factory.py 中注册模板文件: assets/template/YYBIPV5_banktransaction.xlsx
Sheet: 银行流水处理
├── Row 1-3: 模板说明
├── Row 4: 英文字段名 (id, accentity_code, bankaccount_account, ...)
├── Row 5: 空行
├── Row 6: 中文字段名 (*银行账号, *本方交易流水号, ...)
├── Row 7-9: 空行
└── Row 10+: 数据行
BIPPI-imp-trm-accstmt/
├── SKILL.md # 技能说明文件
├── scripts/
│ ├── main.py # 主入口
│ ├── core/
│ │ ├── data_structures.py # 数据结构定义
│ │ ├── parser_factory.py # 解析器工厂
│ │ ├── mapper_factory.py # 映射器工厂
│ │ ├── cosine_similarity.py # 余弦相似度工具
│ │ ├── currency_map.py # 币种代码映射
│ │ └── template_manager.py # 模板文件管理器(本地查找+自动下载)
│ ├── parsers/
│ │ ├── base_parser.py # 解析器基类
│ │ ├── mt940_parser.py # MT940解析器
│ │ ├── excel_parser.py # 国内银行Excel解析器
│ │ └── pdf_parser.py # 国内银行PDF解析器(文本+可插拔OCR)
│ ├── mappers/
│ │ ├── base_mapper.py # 映射器基类
│ │ ├── _xls_template_helpers.py # xls模板写入辅助
│ │ ├── bipv5_mapper.py # BIPV5映射器
│ │ ├── eas_yxh_mapper.py # 金蝶云星瀚映射器
│ │ ├── fingard_mapper.py # 保融ATS映射器
│ │ ├── nstc_mapper.py # 九恒星司库映射器
│ │ └── yyncc_mapper.py # 用友NCC映射器
│ └── mappings/
│ └── mt940_to_bipv5.json # MT940到BIPV5映射配置
├── assets/
│ └── template/ # 5 个目标系统的导入模板
│ ├── YYBIPV5_banktransaction.xlsx
│ ├── eas_yxh_banktransaction.xlsx
│ ├── fingard_banktransaction.xls
│ ├── nstc_banktransaction.xls
│ └── yyncc_banktransaction.xls
├── references/
│ ├── currency.md # 币种代码参考
│ └── User Guide - Exporting Data in SWIFT MT940 Format[1].pdf
└── evals/
└── evals.json # 测试用例
# 单文件转换(输出到输入文件同目录)
python scripts/main.py input.xlsx
python scripts/main.py input.pdf
# 单文件转换(指定输出路径)
python scripts/main.py input.xlsx -o output/BIPV5_output.xlsx
python scripts/main.py input.pdf -o output/BIPV5_output.xlsx
# 批量转换(每个文件单独输出到输入目录)
python scripts/main.py --batch -i ./input_dir
# 批量合并(输出到输入目录)
python scripts/main.py --merge -i ./input_dir
# 批量合并(指定输出文件)
python scripts/main.py --merge -i ./input_dir -o ./output/merged.xlsx
安装依赖:
pip install openpyxl pandas scikit-learn pymupdf pillow
如需OCR支持图片型PDF(可选):
pip install pytesseract
# 还需要安装系统级 Tesseract:Windows 从 https://github.com/UB-Mannheim/tesseract/wiki 下载并安装
# 安装中文语言包(chi_sim),然后在 PDFParser 中注入:
# parser.set_ocr_backend(TesseractOCR())
| 错误代码 | 说明 | 处理建议 |
|---|---|---|
| E001 | 无法识别文件格式 | 检查文件是否为有效的MT940/Excel/PDF格式 |
| E002 | 解析失败 | 检查文件内容是否符合规范 |
| E003 | 必填字段缺失 | 检查映射配置是否完整 |
| E004 | 日期格式错误 | 检查日期字段格式配置 |
| E005 | 金额格式错误 | 检查金额字段格式配置 |
| E006 | 映射配置错误 | 检查JSON配置文件语法 |
| E007 | 输出目录不存在 | 创建输出目录 |
| E008 | PDF无可提取文字且未配置OCR | 安装Tesseract OCR并注入后端,或预转换PDF为文本型 |
| E009 | PDF页面无文字层且无图片 | 检查PDF是否有效 |
BaseParserparse() 和 detect_format() 方法parser_factory.py 中注册BaseMappermapper_factory.py 中注册OCRBackend 接口的 image_to_text 方法PDFParser.set_ocr_backend(your_backend) 注入