শুরু করা

ব্যাঙ্ক স্টেটমেন্ট পার্সার দিয়ে সুরক্ষিত অ্যাপ্লিকেশন তৈরি করা শুরু করুন

প্রয়োজনীয়তা

ইনস্টল করুন

# Core install (deterministic parsers only)
pip install bankstatementparser

অতিরিক্ত ক্ষমতার জন্য ঐচ্ছিক extras:

# Text-LLM path for digital PDFs (litellm + pypdf)
pip install 'bankstatementparser[hybrid]'

# Higher-fidelity table extraction (adds pdfplumber)
pip install 'bankstatementparser[hybrid-plus]'

# Vision-LLM path for scanned PDFs (adds pypdfium2)
pip install 'bankstatementparser[hybrid-vision]'

# LLM-powered transaction categorisation
pip install 'bankstatementparser[enrichment]'

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

# Optional Polars DataFrame support
pip install 'bankstatementparser[polars]'

দ্রুত শুরু

অটো-ডিটেক্ট এবং যেকোনো স্ট্রাকচার্ড ফর্ম্যাট পার্স করুন

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())

এটি .xml (CAMT/PAIN.001), .csv, .ofx, .qfx, .mt940, এবং .sta ফাইলের সাথে কাজ করে।

CAMT.053 পার্স করুন

from bankstatementparser import CamtParser

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

PAIN.001 পার্স করুন

from bankstatementparser import Pain001Parser

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

PDF ব্যাঙ্ক স্টেটমেন্ট পার্স করুন (Hybrid Pipeline)

Hybrid pipeline বুদ্ধিমত্তার সাথে PDF তিনটি extraction পথে রাউট করে:

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

প্রতিটি extraction Golden Rule দিয়ে যাচাই করা হয়: opening + credits − debits == closing

বড় ফাইল Streaming

হাজার হাজার লেনদেন সহ ফাইলের জন্য, মেমরি সীমাবদ্ধ রাখতে streaming ব্যবহার করুন:

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

In-Memory পার্সিং

ডিস্ক I/O ছাড়া বাইট থেকে পার্স করুন -- SFTP বা API ওয়ার্কফ্লোর জন্য উপযোগী:

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

Parallel ফাইল Processing

একসাথে একাধিক ফাইল পার্স করুন:

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

স্বয়ংক্রিয় ডিডুপ্লিকেশন সহ সম্পূর্ণ ফোল্ডার ট্রি প্রক্রিয়া করুন:

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 transaction hash:

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)}")

Transaction Categorisation (Enrichment)

LLM-চালিত ক্লাসিফিকেশন ব্যবহার করে স্বয়ংক্রিয়ভাবে লেনদেন ক্যাটাগরাইজ করুন:

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)

Plaintext-accounting জার্নাল ফর্ম্যাটে লেনদেন এক্সপোর্ট করুন:

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 Balance Verification

প্রতিটি মুদ্রা গোষ্ঠীর জন্য স্বতন্ত্রভাবে ব্যালেন্স যাচাই করুন:

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

FastAPI মাইক্রোসার্ভিস হিসেবে ডিপ্লয় করুন:

# Start the API server
bankstatementparser-api --port 8000

# For container deployments
bankstatementparser-api --host 0.0.0.0 --port 9000

Endpoints:

Secure ZIP Processing

বিল্ট-ইন নিরাপত্তা চেক (বোমা সুরক্ষা, এনক্রিপ্টেড এন্ট্রি প্রত্যাখ্যান) সহ জিপ করা XML ফাইল প্রক্রিয়া করুন:

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")

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")

CLI ব্যবহার

# Parse structured formats
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

# Export to CSV with streaming
bankstatementparser --type camt --input statement.xml --output transactions.csv
bankstatementparser --type camt --input statement.xml --streaming --show-pii

CLI অপশন:

স্থানীয় ডেভেলপমেন্ট সেটআপ

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

টেস্ট স্যুট চালান:

pytest

API রেফারেন্স

পার্সার ক্লাস

ক্লাস ফর্ম্যাট 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

ইউটিলিটি ফাংশন

ফাংশন উদ্দেশ্য
detect_statement_format(path) ফাইল ফর্ম্যাট অটো-ডিটেক্ট করুন
create_parser(path, fmt) উপযুক্ত পার্সার তৈরি করুন
parse_files_parallel(paths) একসাথে একাধিক ফাইল পার্স করুন
iter_secure_xml_entries(zip_path) নিরাপদে ZIP এন্ট্রি iterate করুন
smart_ingest(path) যাচাই সহ hybrid PDF extraction
scan_and_ingest(dir, pattern) Bulk directory scanning
verify_balance_multi_currency(txns) প্রতি-মুদ্রা ব্যালেন্স যাচাই
to_hledger(txns, account) hledger জার্নাল ফর্ম্যাটে এক্সপোর্ট
to_beancount(txns, account) beancount জার্নাল ফর্ম্যাটে এক্সপোর্ট

ডেটা ক্লাস

ক্লাস উদ্দেশ্য
Deduplicator ডুপ্লিকেট লেনদেন শনাক্ত করুন
DeduplicationResult ইউনিক, exact, ও suspected match এর ফলাফল
InputValidator ফাইল পাথ ও ফর্ম্যাট ভ্যালিডেট করুন
Transaction নরমালাইজড লেনদেনের রেকর্ড
FileResult Parallel parsing থেকে ফলাফল
ZipXMLSource ZIP member wrapper
IngestResult যাচাই সহ hybrid pipeline ফলাফল
VerificationResult ব্যালেন্স যাচাইয়ের ফলাফল
Categorizer LLM-চালিত transaction categorisation
AccountMapper Regex-ভিত্তিক account mapping নিয়ম

Exceptions

Exception কখন উত্থাপিত হয়
ParserError পার্সিং ব্যর্থতা
ExportError এক্সপোর্ট ব্যর্থতা (CSV/JSON/Excel)
ValidationError ইনপুট ভ্যালিডেশন ব্যর্থতা
ZipSecurityError ZIP নিরাপত্তা চেক ব্যর্থতা