使用案例

实际应用

Bank Statement Parser 处理真实的金融工作流:PDF 银行对账单摄取、MT940 到 CAMT 迁移、带余额校验的自动对账、合规管道、纯文本记账导出、REST API 部署、批量扫描和多银行合并。

PDF 银行对账单摄取

效果: 解析数字和扫描的 PDF 银行对账单,自动余额校验——无需云端 API,数据不会离开您的机器。

混合 PDF 管道将每个 PDF 路由至最优提取路径,并验证每次结果。

from bankstatementparser.hybrid import smart_ingest

result = smart_ingest("statement.pdf")
print(result.source_method)         # "deterministic" | "llm" | "vision"
print(result.verification.status)   # VERIFIED | DISCREPANCY | FAILED

# Review discrepancies interactively
# bankstatementparser --type review --input result.json

批量对账单处理

效果: 单次调用即可扫描整个文件夹树(数百个 PDF、XML、CSV),自动跨文件去重。

from bankstatementparser.hybrid import scan_and_ingest

batch = scan_and_ingest("statements/2026/", pattern="**/*.pdf")
print(f"Files: {len(batch.results)}, Unique txns: {batch.unique_count}")

资金管理:MT940 到 CAMT.053 迁移

效果: 在 SWIFT 迁移窗口(2025 年 11 月至 2028 年 11 月)期间,单次 API 调用即可处理 MT940 和 CAMT.053,无需维护单独的解析管道。

全球资金管理团队正在 2027 年 11 月 SWIFT 截止日期前从 MT940 迁移到 CAMT.053。Bank Statement Parser 使用单一 API 处理两种格式,实现无缝过渡。

from bankstatementparser import create_parser, detect_statement_format

# Process both MT940 and CAMT.053 with the same code
for file in daily_statement_files:
    fmt = detect_statement_format(file)
    parser = create_parser(file, fmt)
    df = parser.parse()
    load_to_treasury_system(df)

带余额校验的自动对账

效果: 格式无关的 DataFrame 配合黄金法则校验和去重,在错误和重复项到达账本之前即予以捕获。

自动解析银行对账单、校验余额并与内部记录匹配。

from bankstatementparser import CamtParser, Deduplicator
from bankstatementparser.hybrid import verify_balance_multi_currency

parser = CamtParser("bank_statement.xml")
bank_txns = parser.parse()

# Verify balances per currency
verification = verify_balance_multi_currency(bank_txns)
for ccy, result in verification.items():
    assert result.status == "VERIFIED", f"{ccy} balance mismatch!"

# Deduplicate before reconciliation
dedup = Deduplicator()
result = dedup.deduplicate(dedup.from_dataframe(bank_txns))
clean_txns = result.unique_transactions

# Match against internal records
unmatched = reconcile(clean_txns, internal_ledger)

纯文本记账(hledger / beancount)

效果: 自动摄取 PDF 银行对账单,导出分类后的交易到 hledger 或 beancount 日记账格式。

from bankstatementparser.hybrid import smart_ingest
from bankstatementparser.enrichment import Categorizer
from bankstatementparser.export import to_hledger

result = smart_ingest("statement.pdf")
categorizer = Categorizer()
enriched = categorizer.categorize_batch(result.transactions)
journal = to_hledger(enriched, account="Assets:Bank:Checking")

REST API 部署

效果: 将 Bank Statement Parser 部署为微服务,通过 HTTP 接收对账单文件并返回结构化 JSON。

# Start the API server
bankstatementparser-api --port 8000
# Ingest a statement
curl -X POST http://localhost:8000/ingest \
  -F "file=@statement.pdf"

合规与审计管道

效果: 确定性输出、自动 PII 脱敏和黄金法则校验,生成满足监管可重复性要求的审计就绪日志。

from bankstatementparser import CamtParser

parser = CamtParser("statement.xml")

# Stream with PII redacted for audit logs
for txn in parser.parse_streaming(redact_pii=True):
    audit_log.write(txn)

# Export full data for secure internal processing
parser.export_csv("archive/statement.csv")

SFTP 到 DataFrame 工作流

效果: 直接从字节解析,零磁盘 I/O,原生适配 SFTP 和 API 驱动的银行连接工作流。

from bankstatementparser import CamtParser

xml_bytes = sftp_client.read("daily_statement.xml")
parser = CamtParser.from_bytes(xml_bytes, source_name="daily.xml")
df = parser.parse()

多银行合并

效果: 并行解析 HSBC(CAMT)、Barclays(MT940)、Revolut(CSV)、Wise(OFX)和 Chase(PDF),生成单一标准化数据集。

from bankstatementparser import parse_files_parallel

results = parse_files_parallel([
    "hsbc/camt053.xml",
    "barclays/mt940.sta",
    "revolut/transactions.csv",
    "wise/statement.ofx",
])

all_transactions = pd.concat([r.transactions for r in results if r.status == "success"])

使用 ZIP 档案批处理

效果: 内置 ZIP 炸弹防护(100:1 压缩比限制、10 MB 条目上限、加密条目拒绝),安全处理月度对账单归档。

from bankstatementparser import iter_secure_xml_entries, CamtParser

for entry in iter_secure_xml_entries("monthly_statements.zip"):
    parser = CamtParser.from_bytes(entry.xml_bytes, source_name=entry.source_name)
    df = parser.parse()
    save_to_warehouse(entry.source_name, df)

与替代方案比较 ❯ | 规划 ISO 20022 迁移 ❯ | 开始使用 ❯