Pagsisimula

Simulan ang Pagbuo ng Mga Secure na Application gamit ang Bank Statement Parser

Mga Kinakailangan

I-install

# Core install (mga deterministikong parser lamang)
pip install bankstatementparser

Mga opsyonal na extra para sa karagdagang kakayahan:

# Text-LLM path para sa mga digital PDF (litellm + pypdf)
pip install 'bankstatementparser[hybrid]'

# Mas mataas na katumpakan sa table extraction (nagdadagdag ng pdfplumber)
pip install 'bankstatementparser[hybrid-plus]'

# Vision-LLM path para sa mga na-scan na PDF (nagdadagdag ng pypdfium2)
pip install 'bankstatementparser[hybrid-vision]'

# LLM-powered na kategorisasyon ng transaksyon
pip install 'bankstatementparser[enrichment]'

# REST API microservice (FastAPI + uvicorn)
pip install 'bankstatementparser[api]'

# Opsyonal na suporta sa Polars DataFrame
pip install 'bankstatementparser[polars]'

Mabilis na Pagsisimula

Auto-Detect at I-parse ang Anumang Structured na Format

from bankstatementparser import create_parser, detect_statement_format

fmt = detect_statement_format("transactions.ofx")
parser = create_parser("transactions.ofx", fmt)
df = parser.parse()  # pandas DataFrame
print(df.head())

Gumagana ito sa .xml (CAMT/PAIN.001), .csv, .ofx, .qfx, .mt940, at .sta na mga file.

I-parse ang CAMT.053

from bankstatementparser import CamtParser

parser = CamtParser("statement.xml")
transactions = parser.parse()

I-parse ang PAIN.001

from bankstatementparser import Pain001Parser

parser = Pain001Parser("payment.xml")
payments = parser.parse()

I-parse ang mga PDF Bank Statement (Hybrid Pipeline)

Matalinong niru-route ng hybrid pipeline ang mga PDF sa tatlong extraction path:

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
print(result.transactions)          # List of extracted transactions

Bawat extraction ay bineberipika gamit ang Golden Rule: opening + credits − debits == closing.

Pag-stream ng Malalaking File

Para sa mga file na may libu-libong transaksyon, gumamit ng streaming upang panatilihing limitado ang memorya:

parser = CamtParser("large_statement.xml")
for transaction in parser.parse_streaming(redact_pii=True):
    process(transaction)  # Memory stays constant

In-Memory Parsing

I-parse mula sa mga byte na walang disk I/O -- kapaki-pakinabang para sa mga SFTP o API workflow:

xml_bytes = download_from_sftp()
parser = CamtParser.from_bytes(xml_bytes, source_name="daily.xml")
transactions = parser.parse()

Parallel File Processing

Mag-parse ng maraming file nang sabay-sabay:

from bankstatementparser import parse_files_parallel

results = parse_files_parallel([
    "statements/jan.xml",
    "statements/feb.xml",
    "statements/mar.xml",
])
for r in results:
    print(r.path, r.status, len(r.transactions), "rows")

Bulk Directory Scanning

Iproseso ang buong folder tree na may awtomatikong deduplikasyon:

from bankstatementparser.hybrid import scan_and_ingest

batch = scan_and_ingest("statements/2026/", pattern="**/*.pdf")
print(f"Processed: {len(batch.results)} files")
print(f"Unique transactions: {batch.unique_count}")

Deduplication

Idempotent na transaction hash para sa ligtas na incremental ingestion:

from bankstatementparser import CamtParser, Deduplicator

parser = CamtParser("statement.xml")
dedup = Deduplicator()
result = dedup.deduplicate(dedup.from_dataframe(parser.parse()))

print(f"Unique: {len(result.unique_transactions)}")
print(f"Exact duplicates: {len(result.exact_duplicates)}")
print(f"Suspected matches: {len(result.suspected_matches)}")

Kategorisasyon ng Transaksyon (Enrichment)

Awtomatikong ikategorya ang mga transaksyon gamit ang LLM-powered na klasipikasyon:

from bankstatementparser.enrichment import Categorizer

categorizer = Categorizer()
enriched = categorizer.categorize_batch(transactions)
for txn in enriched:
    print(f"{txn.description}: {txn.category}")

Ledger Export (hledger / beancount)

I-export ang mga transaksyon sa plaintext-accounting na journal format:

from bankstatementparser.export import to_hledger, to_beancount

journal = to_hledger(transactions, account="Assets:Bank:Checking")
beancount_journal = to_beancount(transactions, account="Assets:Bank:Checking")

Multi-Currency na Beripikasyon ng Balanse

Beripikasyon ng balanse nang independyente sa bawat currency group:

from bankstatementparser.hybrid import verify_balance_multi_currency

results = verify_balance_multi_currency(transactions)
for currency, verification in results.items():
    print(f"{currency}: {verification.status}")

REST API

I-deploy bilang FastAPI microservice:

# Simulan ang API server
bankstatementparser-api --port 8000

# Para sa mga container deployment
bankstatementparser-api --host 0.0.0.0 --port 9000

Mga endpoint:

Secure na Pagproseso ng ZIP

Iproseso ang mga naka-zip na XML file na may built-in na mga pagsusuri sa seguridad (bomb protection, encrypted entry rejection):

from bankstatementparser import iter_secure_xml_entries, CamtParser

for entry in iter_secure_xml_entries("statements.zip"):
    parser = CamtParser.from_bytes(entry.xml_bytes, source_name=entry.source_name)
    print(f"{entry.source_name}: {len(parser.parse())} transactions")

I-export

parser = CamtParser("statement.xml")
parser.export_csv("output.csv")
parser.export_json("output.json")

# Polars (requires bankstatementparser[polars])
polars_df = parser.to_polars()

# Excel
parser.camt_to_excel("output.xlsx")

Paggamit ng CLI

# I-parse ang mga structured format
bankstatementparser --type camt --input statement.xml
bankstatementparser --type pain001 --input payment.xml

# Hybrid PDF pipeline
bankstatementparser --type ingest --input statement.pdf
bankstatementparser --type ingest --input statement.pdf --output ledger.csv

# Interactive review mode
bankstatementparser --type review --input result.json
bankstatementparser --type review --input result.json --output reviewed.json

# I-export sa CSV gamit ang streaming
bankstatementparser --type camt --input statement.xml --output transactions.csv
bankstatementparser --type camt --input statement.xml --streaming --show-pii

Mga opsyon sa CLI:

Local Development Setup

git clone https://github.com/sebastienrousseau/bankstatementparser.git
cd bankstatementparser
python3 -m venv .venv && source .venv/bin/activate
pip install poetry && poetry install --with dev
make install-hooks   # pre-commit hook runs `make verify` before every commit

Patakbuhin ang test suite:

pytest

Sanggunian ng API

Mga Klase ng Parser

Klase Format Import
CamtParser CAMT.053 (ISO 20022) from bankstatementparser import CamtParser
Pain001Parser PAIN.001 (ISO 20022) from bankstatementparser import Pain001Parser
CsvStatementParser CSV from bankstatementparser import CsvStatementParser
OfxParser OFX from bankstatementparser import OfxParser
QfxParser QFX from bankstatementparser import QfxParser
Mt940Parser MT940 from bankstatementparser import Mt940Parser
smart_ingest() PDF (hybrid pipeline) from bankstatementparser.hybrid import smart_ingest

Mga Utility Function

Function Layunin
detect_statement_format(path) Auto-detect ang format ng file
create_parser(path, fmt) Lumikha ng naaangkop na parser
parse_files_parallel(paths) Mag-parse ng maraming file nang sabay-sabay
iter_secure_xml_entries(zip_path) Ulitin ang mga entry sa ZIP nang secure
smart_ingest(path) Hybrid PDF extraction na may beripikasyon
scan_and_ingest(dir, pattern) Bulk directory scanning
verify_balance_multi_currency(txns) Beripikasyon ng balanse sa bawat currency
to_hledger(txns, account) I-export sa hledger journal format
to_beancount(txns, account) I-export sa beancount journal format

Mga Klase ng Data

Klase Layunin
Deduplicator I-detect ang mga duplicate na transaksyon
DeduplicationResult Resulta na may natatangi, eksakto, at pinaghihinalaang mga tugma
InputValidator I-validate ang mga path at format ng file
Transaction Normalised na rekord ng transaksyon
FileResult Resulta mula sa parallel parsing
ZipXMLSource ZIP member wrapper
IngestResult Resulta ng hybrid pipeline na may beripikasyon
VerificationResult Kinalabasan ng beripikasyon ng balanse
Categorizer LLM-powered na kategorisasyon ng transaksyon
AccountMapper Regex-based na account mapping rule

Mga Exception

Exception Kailan Itinaas
ParserError Mga pagkabigo sa pag-parse
ExportError Mga pagkabigo sa pag-export (CSV/JSON/Excel)
ValidationError Mga pagkabigo sa pagpapatunay ng input
ZipSecurityError Mga pagkabigo sa pagsusuri sa seguridad ng ZIP