사용 사례

실제 응용 프로그램

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)

잔액 검증이 포함된 자동 조정

결과: Golden Rule 검증과 중복 제거가 포함된 형식 독립적 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 마스킹, Golden Rule 검증으로 규제 재현성 요구 사항을 충족하는 감사 대응 로그를 생성합니다.

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, 항목 한도 10MB, 암호화된 항목 거부)로 월별 명세서 아카이브를 안전하게 처리합니다.

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 마이그레이션 계획 ❯ | 시작하기 ❯