요약: Bank Statement Parser는 7가지 은행 명세서 형식(CAMT.053, PAIN.001, CSV, OFX, QFX, MT940, PDF)을 pandas DataFrame으로 파싱하는 오픈 소스 Python 라이브러리입니다. 잔액 검증이 포함된 하이브리드 PDF 파이프라인, REST API, 보강, 원장 내보내기, 27K+ tx/s 처리량을 제공합니다.
Bank Statement Parser는 7가지 형식의 은행 명세서를 구조화된 pandas DataFrame으로 파싱하는 오픈 소스 Python 라이브러리입니다. 결정적 코어는 구조화된 형식을 네트워크 호출 없이 로컬에서 처리합니다. 선택적 하이브리드 PDF 파이프라인은 디지털 및 스캔 명세서를 로컬 LLM(Ollama 경유)을 통해 처리합니다.
대상 사용자
- 전환 기간 동안 이전 형식과 새 형식을 모두 처리하는 파서가 필요하고, 구조화된 내보내기를 제공하지 않는 은행의 PDF 명세서도 처리해야 하는 MT940에서 CAMT.053으로 마이그레이션하는 재무팀.
- 내장 잔액 검증, 분류, 원장 내보내기가 포함된 단일 종속성으로 조정, 보고 또는 회계 파이프라인을 구축하는 핀테크 개발자.
- 기본 PII 마스킹, 결정적 출력, 불일치를 원장에 도달하기 전에 감지하는 Golden Rule 검증이 필요한 컴플라이언스팀.
- PDF 은행 명세서에서 hledger 또는 beancount 저널로 자동 수집을 원하는 일반 텍스트 회계 사용자.
- 로컬 오픈 소스 도구로 처리할 수 있는데 민감한 금융 데이터를 제3자 SaaS로 보내는 것을 거부하는 모든 사용자.
지원 형식
| 형식 | 표준 | 파일 유형 | 파서/메서드 |
|---|---|---|---|
| CAMT.053 | ISO 20022 은행-고객 명세서 | .xml |
CamtParser |
| PAIN.001 | ISO 20022 자금이체 개시 | .xml |
Pain001Parser |
| CSV | 일반 은행 내보내기 | .csv |
CsvStatementParser |
| OFX | Open Financial Exchange | .ofx |
OfxParser |
| QFX | Quicken Financial Exchange | .qfx |
QfxParser |
| MT940 | SWIFT 표준 | .mt940, .sta |
Mt940Parser |
| 디지털 및 스캔 명세서 | .pdf |
smart_ingest() |
모든 형식은 일관된 열 이름을 가진 정규화된 pandas DataFrame을 생성하므로, 다운스트림 처리가 형식에 구애받지 않습니다.
주요 기능
- 하이브리드 PDF 파이프라인:
smart_ingest()가 PDF를 3가지 경로(결정적 테이블 추출, 텍스트-LLM, 비전-LLM)로 라우팅하며 자동 Golden Rule 잔액 검증을 수행합니다. - 형식 자동 감지:
detect_statement_format()이 형식을 식별하고,create_parser()가 올바른 파서를 인스턴스화합니다. - 잔액 검증: Golden Rule 검사(
opening + credits − debits == closing)로 VERIFIED/DISCREPANCY/FAILED 상태를 반환합니다. - 다중 통화 검증:
verify_balance_multi_currency()가 통화별로 트랜잭션을 그룹화하여 독립적으로 검증합니다. - REST API: 프로덕션 배포를 위한
/ingest및/health엔드포인트를 갖춘 FastAPI 마이크로서비스입니다. - 보강: 플러그인 가능한 스키마(Plaid 13개 카테고리 기본값)를 사용한 LLM 기반 트랜잭션 분류를 지원합니다.
- 대화형 검토:
--type review를 통해 수락/편집/건너뛰기/삭제 동작으로 불일치를 검토합니다. - 원장 내보내기: 일반 텍스트 회계 워크플로를 위한
to_hledger()및to_beancount()를 제공합니다. - 대량 스캔:
scan_and_ingest()가 폴더 트리를 처리하며 파일 간 자동 중복 제거를 수행합니다. - 계정 매핑: JSON 설정에서 정규식 기반 계정 매핑 규칙을 사용하여 원장 내보내기를 지원합니다.
- 스트리밍 파싱:
parse_streaming()으로 대용량 파일(50MB+, 50K+ 트랜잭션)을 제한된 메모리로 처리합니다. - 병렬 처리: ProcessPoolExecutor를 사용하는
parse_files_parallel()로 여러 파일을 동시에 파싱합니다. - 중복 제거: 안전한 증분 수집을 위한 멱등성
transaction_hash(MD5 핑거프린트)를 제공합니다. - 메모리 내 파싱: 디스크 I/O 없이 SFTP 및 API 워크플로를 위한
from_string()및from_bytes()를 지원합니다. - 보안 ZIP 처리: 압축 비율 제한, 항목 크기 제한, 암호화된 항목 거부 기능이 있는
iter_secure_xml_entries()를 제공합니다. - 내보내기: CSV, JSON, Excel(
.xlsx), Polars DataFrame, hledger, beancount 저널을 지원합니다.
보안 및 프라이버시
- PII 마스킹: 이름, IBAN, 주소는 기본적으로 CLI 출력에서 마스킹됩니다.
--show-pii로 표시를 선택할 수 있습니다. - XXE 보호: XML 파싱에
resolve_entities=False,no_network=True,load_dtd=False를 사용합니다. - ZIP 폭탄 보호: 압축 비율 제한(기본값 100:1), 항목 크기 제한(10MB), 암호화된 항목 거부를 적용합니다.
- 경로 탐색 방지: 위험한 패턴 차단 목록 및 심볼릭 링크 해석을 수행합니다.
- 공급망 보안: SHA-256 해시 잠금 종속성, CycloneDX SBOM, 빌드 출처 증명을 제공합니다.
- 로컬 LLM 전용: 하이브리드 PDF 파이프라인은 로컬 추론을 위해 Ollama를 사용합니다. 클라우드 API로 데이터가 전송되지 않습니다.
성능
| 지표 | 값 |
|---|---|
| CAMT.053 처리량 | 27,000+ tx/s |
| PAIN.001 처리량 | 52,000+ tx/s |
| 트랜잭션당 지연 시간 (CAMT) | 37 마이크로초 |
| 트랜잭션당 지연 시간 (PAIN.001) | 19 마이크로초 |
| 첫 번째 결과 반환 시간 | < 2 ms |
| 메모리 확장 (1K-50K tx) | 일정 (스트리밍) |
| 테스트 커버리지 | 100% 브랜치 커버리지 |
| 테스트 | 29개 테스트 파일에 걸쳐 718개 |
시작하기
"GitHub 저장소"