Bank Statement Parser는 7가지 형식(CAMT.053, PAIN.001, CSV, OFX, QFX, MT940, PDF)의 은행 명세서를 구조화된 pandas DataFrame으로 파싱하는 오픈 소스 Python 라이브러리입니다. 모든 처리는 로컬에서 실행됩니다. 결정적 출력, 자동 PII 마스킹, 필요 시 로컬 LLM을 경유하는 선택적 하이브리드 PDF 파이프라인을 제공합니다.
몇 초 만에 시작하기
pip install bankstatementparser
from bankstatementparser import create_parser, detect_statement_format
fmt = detect_statement_format("statement.xml")
parser = create_parser("statement.xml", fmt)
df = parser.parse() # pandas DataFrame, ready to use
# Parse PDFs with the hybrid pipeline (v0.0.5+)
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
하나의 라이브러리, 일곱 가지 형식
단일 통합 API로 CAMT.053, PAIN.001, CSV, OFX, QFX, MT940, PDF를 구조화된 pandas DataFrame으로 파싱합니다. 각 형식별로 별도의 패키지를 설치할 필요가 없습니다.
| 기능 | Bank Statement Parser | 단일 형식 OSS (mt940, ofxparse) | SaaS (Ocrolus, Parseur) |
|---|---|---|---|
| 지원 형식 | 7, 통합 API | 각 1개 | 다수 (OCR 기반) |
| PDF 지원 | 하이브리드 파이프라인 (결정적 + LLM + 비전) | 없음 | 있음 (클라우드 OCR) |
| 데이터 프라이버시 | 100% 로컬 (LLM은 Ollama로 로컬 실행) | 100% 로컬 | 외부로 데이터 전송 |
| 비용 | 무료, Apache 2.0 | 무료 | $49-$1,000+/월 |
| 잔액 검증 | Golden Rule (시작잔액 + 입금 − 출금 = 마감잔액) | 없음 | 상이함 |
| PII 마스킹 | 내장, 기본 활성화 | 없음 | 상이함 |
| 스트리밍 | 제한된 메모리 사용 | 없음 | 해당 없음 |
| REST API | 내장 FastAPI 마이크로서비스 | 없음 | 있음 |
| 중복 제거 | 멱등성 트랜잭션 해시 | 없음 | 일부 |
| 원장 내보내기 | hledger + beancount | 없음 | 없음 |
하이브리드 PDF 파이프라인
Bank Statement Parser v0.0.5+에는 PDF 은행 명세서를 위한 3경로 하이브리드 파이프라인이 포함되어 있습니다.
- 경로 A (결정적): 구조화된 PDF 테이블을 직접 파싱합니다. 무료이며 가장 빠르고 LLM이 필요하지 않습니다.
- 경로 B (텍스트-LLM): 복잡한 레이아웃의 디지털 PDF를 로컬 LLM(LiteLLM/Ollama)으로 추출합니다.
- 경로 C (비전-LLM): 스캔 또는 복사된 명세서를 멀티모달 비전 모델로 처리합니다.
모든 추출 결과는 Golden Rule로 검증됩니다: opening balance + credits − debits == closing balance.
ISO 20022 마이그레이션을 위한 설계
SWIFT는 확정된 기한을 설정했습니다. 모든 금융 기관은 2027년 11월까지 CAMT.053을 수신해야 하며, MT940/MT942/MT950은 2028년 11월까지 완전히 폐기됩니다. Bank Statement Parser는 레거시 MT940과 최신 ISO 20022 형식(CAMT.053, PAIN.001)을 단일 API에서 모두 처리하므로, 전환 기간과 그 이후에도 파싱 파이프라인이 작동합니다.
성능
- CAMT.053 파싱 시 초당 27,000+ 트랜잭션
- PAIN.001 파싱 시 초당 52,000+ 트랜잭션
- 2ms 미만 첫 번째 결과 반환 시간
- 스트리밍으로 1K~50K+ 트랜잭션까지 일정한 메모리 사용
- Python 3.10~3.14에서 100% 브랜치 커버리지의 718개 테스트
Bank Statement Parser를 선택하는 이유
- 하이브리드 PDF 추출:
smart_ingest()가 디지털 및 스캔 PDF를 자동 라우팅과 잔액 검증으로 처리합니다. - 형식 자동 감지:
detect_statement_format()이 파일을 자동 식별하고create_parser()가 올바른 파서를 반환합니다. - 프라이버시 최우선: PII 마스킹이 기본 활성화됩니다. LLM은 Ollama를 통해 로컬에서 실행되므로 데이터가 외부로 유출되지 않습니다.
- REST API: FastAPI 마이크로서비스로 배포하며
/ingest및/health엔드포인트를 제공합니다. - 보강: LLM 기반 트랜잭션 분류와 플러그인 가능한 스키마(Plaid 13개 카테고리 기본값)를 지원합니다.
- 원장 내보내기: 일반 텍스트 회계 워크플로를 위해 hledger 및 beancount 저널 형식으로 내보냅니다.
- 대량 스캔:
scan_and_ingest()가 폴더 트리를 처리하며 파일 간 자동 중복 제거를 수행합니다. - 다중 통화:
verify_balance_multi_currency()가 통화 그룹별로 Golden Rule 검증을 실행합니다. - 프로덕션 대응: 보안 ZIP 수집, 입력 유효성 검사, 경로 탐색 방지 및 대화형 검토 모드를 지원합니다.
- 유연한 출력: CSV, JSON, Excel, Polars, hledger, beancount로 내보냅니다.
- 병렬 처리:
parse_files_parallel()로 여러 파일을 동시에 파싱합니다.
프로덕션을 위한 설계
Bank Statement Parser는 민감한 금융 데이터를 처리하는 재무팀, 핀테크 개발자, 컴플라이언스 담당자를 위해 설계되었습니다. MT940-CAMT 마이그레이션 파이프라인, 자동화된 조정 시스템, PDF 명세서 수집, 금융 기관 전반의 규제 감사 워크플로에 사용됩니다.
- Python 3.10~3.14에서 100% 브랜치 커버리지의 718개 테스트
- 모든 릴리스에 CycloneDX SBOM이 포함된 SHA-256 해시 잠금 종속성
- 결정적 출력 — 동일한 입력은 매번 바이트 단위로 동일한 결과를 생성합니다
- Apache 2.0 라이선스 — 상업 및 내부 시스템에서 자유롭게 사용 가능
대안을 평가하고 계신가요? Bank Statement Parser 비교 보기 ❯ | 실제 사용 사례 살펴보기 ❯