使用例

現実世界のアプリケーション

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)を 1 回の呼び出しでファイル間の自動重複排除とともにスキャンします。

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 への移行を計画する ❯ | はじめる ❯