使用案例

實際應用

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 遷移 ❯ | 開始使用 ❯