अक्सर पूछे जाने वाले प्रश्न

बैंक स्टेटमेंट पार्सर के बारे में सामान्य प्रश्न

डेटा गोपनीयता और कंप्लायंस

क्या कोई डेटा मेरे infrastructure से बाहर जाता है?

नहीं — PDF extraction के लिए भी नहीं। Bank Statement Parser एक stateless लाइब्रेरी के रूप में कार्य करता है। सारी प्रोसेसिंग -- पार्सिंग, PII रिडक्शन, archive extraction -- आपकी स्थानीय runtime मेमोरी में होती है। Hybrid PDF pipeline स्थानीय LLM inference के लिए Ollama का उपयोग करती है — कोई cloud API नहीं। XML पार्सर no_network=True से hardened हैं, जो parser स्तर पर सभी outbound access block करता है। आपका वित्तीय डेटा कभी आपके environment से बाहर नहीं जाता।

PII रिडक्शन कैसे काम करता है?

संवेदनशील fields आपके application logic तक पहुँचने से पहले mask हो जाते हैं। Parser debtor names, creditor names, IBAN, और postal addresses पहचानता है और उन्हें console output तथा streaming mode में ***REDACTED*** से बदल देता है।

  • CLI output और streaming mode में रिडक्शन डिफ़ॉल्ट रूप से चालू है
  • फ़ाइल निर्यात (CSV, JSON, Excel) downstream प्रोसेसिंग के लिए unredacted डेटा बनाए रखता है।
  • CLI पर --show-pii या API में redact_pii=False से पूर्ण डेटा के लिए ऑप्ट इन करें।

क्या extraction प्रक्रिया नियतात्मक है?

संरचित प्रारूपों के लिए हाँ — हर रन पर byte-identical आउटपुट। समान इनपुट फ़ाइल दिए जाने पर, deterministic पार्सर (CAMT, PAIN.001, CSV, OFX, QFX, MT940) हर बार एक ही परिणाम देते हैं। कोई randomness नहीं, कोई model inference नहीं, कोई heuristic sampling नहीं।

Hybrid PDF pipeline के लिए, LLM-आधारित extraction paths रन के बीच मामूली भिन्नता दे सकते हैं। इसीलिए हर PDF extraction Golden Rule (opening + credits − debits == closing) से verify होती है और flagged विसंगतियों की interactively समीक्षा की जा सकती है।

CI 718 tests के साथ 100% branch coverage पर determinism लागू करता है, जिसमें Hypothesis के माध्यम से property-based fuzzing भी शामिल है।

परियोजना किन compliance मानकों का पालन करती है?

परियोजना पूर्ण traceability के साथ ISO 13485-aligned documentation बनाए रखती है:

  • Severity/probability scoring और residual risk assessment के साथ एक quantified Risk Register
  • 5 phases में 19 gated steps के साथ एक Verification and Validation Plan
  • Impact assessment और rollback protocols के साथ एक Change Control Procedure
  • जोखिम स्तर और EOL tracking के साथ सभी dependencies cover करने वाला एक SOUP Register
  • Design inputs को implementation और verification से map करने वाला एक Traceability Matrix

हर release में CycloneDX SBOM, SHA-256 checksums, और GitHub build provenance attestation शामिल होता है।

प्रदर्शन और स्केलेबिलिटी

Bank Statement Parser कितना तेज़ है?

प्रदर्शन thresholds हर commit पर CI में validate होते हैं:

मीट्रिक मान
CAMT.053 throughput 27,000+ लेनदेन/सेकंड
PAIN.001 throughput 52,000+ लेनदेन/सेकंड
प्रति-लेनदेन विलंबता (CAMT) 37 माइक्रोसेकंड
प्रति-लेनदेन विलंबता (PAIN.001) 19 माइक्रोसेकंड
पहले परिणाम तक का समय < 2 ms

PDF extraction गति routing path पर निर्भर करती है: deterministic (sub-second), text-LLM (सेकंड), vision-LLM (प्रति पेज सेकंड)।

बड़ी फ़ाइलें कैसे संभाली जाती हैं?

सीमित मेमोरी के साथ streaming — प्रति फ़ाइल 50,000 लेनदेन पर परीक्षित। XML फ़ाइलों को incrementally प्रोसेस करने के लिए parse_streaming() का उपयोग करें। हर लेनदेन dictionary के रूप में yield होता है; मेमोरी वृद्धि रोकने के लिए प्रोसेसिंग के बाद elements clear हो जाते हैं। मेमोरी फ़ाइल आकार के साथ scale नहीं होती — 50K-लेनदेन test (25+ MB) 10K-लेनदेन test से 2x से कम मेमोरी उपयोग करता है।

50 MB से अधिक फ़ाइलों (जैसे 100K+ payments वाले host-to-host PAIN.001 batches) के लिए, parser chunk-based namespace stripping के साथ temporary file से stream करता है — पूरा document कभी मेमोरी में load नहीं होता।

ZIP archives सुरक्षित रूप से कैसे प्रोसेस होते हैं?

iter_secure_xml_entries() extraction से पहले हर member validate करता है:

  • Entry size cap (डिफ़ॉल्ट 10 MB प्रति entry)
  • कुल uncompressed size cap (डिफ़ॉल्ट 50 MB)
  • ZIP bombs रोकने के लिए compression ratio limit (डिफ़ॉल्ट 100:1)
  • Encrypted entry rejection

डिस्क पर कोई फ़ाइल नहीं लिखी जाती। XML bytes सीधे from_bytes() के माध्यम से parser को जाते हैं।

क्या मैं कई फ़ाइलें समानांतर में पार्स कर सकता हूँ?

हाँ। parse_files_parallel() का उपयोग करें जो ProcessPoolExecutor में काम वितरित करता है:

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

बल्क PDF ingestion के लिए, scan_and_ingest() का उपयोग करें जो स्वचालित डिडुप्लीकेशन के साथ पूरे folder trees प्रोसेस करता है।

समर्थित प्रारूप

कौन से बैंक स्टेटमेंट प्रारूप समर्थित हैं?

प्रारूप मानक फ़ाइल प्रकार पार्सर/विधि
CAMT.053 ISO 20022 Bank-to-Customer Statement .xml CamtParser
PAIN.001 ISO 20022 Credit Transfer Initiation .xml Pain001Parser
CSV सामान्य बैंक निर्यात .csv CsvStatementParser
OFX Open Financial Exchange .ofx OfxParser
QFX Quicken Financial Exchange .qfx QfxParser
MT940 SWIFT मानक .mt940, .sta Mt940Parser
PDF डिजिटल और स्कैन स्टेटमेंट .pdf smart_ingest()

Hybrid PDF pipeline कैसे काम करती है?

Hybrid pipeline (v0.0.5+) बुद्धिमानी से PDF को तीन extraction paths से रूट करती है:

  • Path A (Deterministic): संरचित PDF tables सीधे पार्स होती हैं — मुफ़्त, सबसे तेज़, कोई LLM नहीं चाहिए।
  • Path B (Text-LLM): जटिल layouts वाली डिजिटल PDF स्थानीय LLM (LiteLLM/Ollama) से extract होती हैं।
  • Path C (Vision-LLM): स्कैन या फोटोकॉपी किए गए स्टेटमेंट multimodal vision models से प्रोसेस होते हैं।

हर extraction Golden Rule (opening + credits − debits == closing) से verify होती है। विसंगतियों की --type review से interactively समीक्षा की जा सकती है।

क्या parser CAMT.053 की bank-specific dialects संभालता है?

हाँ — design से namespace-agnostic। Parser processing से पहले XML namespaces हटा देता है, किसी भी CAMT.053 variant (camt.053.001.02, camt.053.001.04, या proprietary bank wrappers) को namespace-specific configuration के बिना संभालता है। XPath queries element structure target करती हैं, namespace URIs नहीं।

उन बैंकों के लिए जो CAMT को custom envelope में wrap करते हैं, inner document सीधे feed करने के लिए from_string() या from_bytes() का उपयोग करें।

क्या मैं custom CSV column headers को standard schema में map कर सकता हूँ?

हाँ — स्वचालित normalisation, शून्य configuration। CsvStatementParser सामान्य header variations पहचानता है: "Date", "Transaction Date", "Booking Date" सभी date field में map होते हैं। "Amount", "Value", "Sum" amount में map होते हैं। Split credit/debit columns (जैसे "Credit" और "Debit") detect होकर स्वचालित रूप से एक signed amount में combine हो जाते हैं।

आउटपुट format क्या है?

सभी parsers सुसंगत column types के साथ standardised pandas DataFrames बनाते हैं:

प्रारूप मुख्य Columns
CAMT Amount, Currency, DrCr, Debtor, Creditor, Reference, ValDt, BookgDt, AccountId
PAIN.001 PmtInfId, PmtMtd, InstdAmt, Currency, CdtrNm, EndToEndId, MsgId, CreDtTm, NbOfTxs
CSV/OFX/QFX/MT940 date, description, amount (normalised)

आप CSV, JSON, Excel, Polars DataFrames, hledger, या beancount journal format में भी निर्यात कर सकते हैं।

PDF और LLM सुविधाएं

Hybrid pipeline कौन से LLM models सपोर्ट करती है?

Pipeline model abstraction layer के रूप में LiteLLM और vision prompts के लिए direct Ollama bridge का उपयोग करती है। अनुशंसित models:

  • Text extraction: कोई भी LiteLLM-compatible model (local या remote)।
  • Vision extraction: स्कैन PDF के लिए ollama/minicpm-v (अनुशंसित)।
  • Categorisation: कोई भी LiteLLM-compatible model।

सभी models Ollama के माध्यम से 100% स्थानीय रूप से चल सकते हैं — कोई API keys आवश्यक नहीं।

Golden Rule सत्यापन क्या है?

हर PDF extraction इस equation से verify होती है: opening balance + credits − debits == closing balance। परिणाम इस प्रकार tag होते हैं:

  • VERIFIED: बैलेंस बिल्कुल मेल खाते हैं।
  • DISCREPANCY: बैलेंस मेल नहीं खाते — समीक्षा अनुशंसित।
  • FAILED: सत्यापन नहीं हो सका (बैलेंस डेटा गायब)।

क्या मैं लेनदेन स्वचालित रूप से वर्गीकृत कर सकता हूँ?

हाँ। Enrichment module (v0.0.6+) LLM-संचालित लेनदेन वर्गीकरण प्रदान करता है:

from bankstatementparser.enrichment import Categorizer

categorizer = Categorizer()
enriched = categorizer.categorize_batch(transactions)

डिफ़ॉल्ट schema 13 Plaid-compatible categories का उपयोग करती है। आप अपनी category schema भी दे सकते हैं।

क्या मैं hledger या beancount में निर्यात कर सकता हूँ?

हाँ (v0.0.8+)। Account mapping के साथ plaintext-accounting journal formats में लेनदेन निर्यात करें:

from bankstatementparser.export import to_hledger, to_beancount

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

ट्रेजरी वर्कफ़्लो

Parser multi-currency स्टेटमेंट कैसे संभालता है?

हर लेनदेन अपनी मूल currency बनाए रखता है — कोई implicit conversion नहीं। Currency field XML Ccy attribute से प्रति लेनदेन extract होती है। Multi-currency स्टेटमेंट यथावत रहते हैं। get_account_balances() method मूल currency codes के साथ प्रति account opening और closing balances लौटाती है।

v0.0.8 से, verify_balance_multi_currency() लेनदेन को currency के अनुसार group करता है और हर group पर स्वतंत्र रूप से Golden Rule चलाता है — उन accounts के लिए उपयोगी जो कई currencies रखते हैं।

क्या parser outgoing और incoming दोनों formats सपोर्ट करता है?

हाँ। Pain001Parser ISO 20022 PAIN.001 credit transfer initiation files (outgoing payments) संभालता है। CamtParser CAMT.053 bank-to-customer statement files (incoming reporting) संभालता है। दोनों streaming, PII रिडक्शन, और CSV, JSON, Excel, hledger, तथा beancount में निर्यात सपोर्ट करते हैं। Format स्वचालित पहचानने के लिए detect_statement_format() का उपयोग करें।

जब कोई लेनदेन प्रविष्टि malformed हो तो क्या होता है?

व्यवहार parsing mode पर निर्भर करता है:

  • parse() (batch mode) -- आवश्यक fields (Amount, Currency, या CdtDbtInd) गायब होने वाली malformed entries warning log के साथ skip हो जाती हैं। बाकी statement सामान्य रूप से पार्स होता है।
  • parse_streaming() (streaming mode) -- Parse errors तुरंत exceptions के रूप में propagate होती हैं। कोई silent data loss नहीं। यह fail-fast व्यवहार वित्तीय workflows के लिए जानबूझकर है जहाँ हर लेनदेन का हिसाब होना चाहिए।
  • smart_ingest() (hybrid PDF) -- Extraction errors IngestResult में verification status के साथ capture होती हैं, जो interactive review की अनुमति देती है।

डिडुप्लीकेशन कैसे काम करता है?

हर लेनदेन को उसके key fields पर आधारित एक idempotent transaction_hash (MD5 fingerprint) assign किया जाता है। यह सुरक्षित incremental ingestion सक्षम करता है — एक ही फ़ाइल re-process करने पर वही hashes बनते हैं, इसलिए duplicates स्वचालित रूप से detect होते हैं।

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

इंस्टॉलेशन और संगतता

Bank Statement Parser कैसे इंस्टॉल करें?

# Core install (deterministic parsers only)
pip install bankstatementparser

# PDF hybrid pipeline
pip install 'bankstatementparser[hybrid]'         # Text-LLM path
pip install 'bankstatementparser[hybrid-vision]'   # Vision-LLM path

# Extras
pip install 'bankstatementparser[enrichment]'      # Transaction categorisation
pip install 'bankstatementparser[api]'             # REST API microservice
pip install 'bankstatementparser[polars]'          # Polars DataFrame support

कौन से Python versions समर्थित हैं?

Python 3.10 से 3.14। Python 3.9 support v0.0.6 में हटा दिया गया (EOL 2025-10-31)। सभी versions 100% branch coverage पर 718 tests के साथ CI में test होते हैं।

Dependencies क्या हैं?

Core लाइब्रेरी में 5 direct dependencies हैं:

  • lxml -- security hardening के साथ XML पार्सिंग
  • pandas -- DataFrames और data manipulation
  • openpyxl -- Excel निर्यात
  • pydantic -- Data validation और models
  • defusedxml -- XXE protection

Optional extras जोड़ते हैं: litellm, pypdf, pdfplumber, pypdfium2, fastapi, uvicorn, polars

सभी dependencies SHA-256 hash-locked versions में हैं। CycloneDX SBOM हर runtime component map करता है।

क्या यह macOS, Linux, और Windows पर काम करता है?

हाँ। लाइब्रेरी macOS, Linux, और Windows (WSL के माध्यम से) पर काम करती है। इसकी कोई platform-specific dependency नहीं है।

क्या REST API है?

हाँ (v0.0.8+)। pip install 'bankstatementparser[api]' से install करें और चलाएं:

bankstatementparser-api --port 8000

Endpoints: POST /ingest (स्टेटमेंट पार्स करें) और GET /health (health check)।

Reproducibility और सुरक्षा

मैं reproducibility कैसे verify कर सकता हूँ?

python -m pytest                              # 718 tests, 100% branch coverage
python scripts/verify_locked_hashes.py        # SHA-256 hash verification
git log --show-signature -1                   # Verify commit signature

कौन सी सुरक्षा protections built-in हैं?

  • XXE Protection: resolve_entities=False, no_network=True, load_dtd=False
  • ZIP Bomb Protection: Compression ratio limits, entry size caps, encrypted entry rejection
  • Path Traversal Prevention: खतरनाक pattern blocklist और symlink resolution
  • Input Validation: फ़ाइल आकार सीमा (100 MB डिफ़ॉल्ट), extension/format validation
  • Supply Chain: SHA-256 hash-locked dependencies, CycloneDX SBOM, build provenance attestation
  • Signed Commits: CI में enforced
  • Local LLMs: Hybrid PDF pipeline Ollama का उपयोग करती है — कोई cloud API calls नहीं

Bank Statement Parser की तुलना pyiso20022 से कैसे होती है?

pyiso20022 एक व्यापक ISO 20022 toolkit है जो ISO XML schemas से Python dataclasses उत्पन्न करता है। यह schema validation के साथ ISO 20022 message types (PACS, PAIN, CAMT, ADMI) की विस्तृत श्रृंखला cover करता है। Bank Statement Parser विशेष रूप से बैंक स्टेटमेंट पार्सिंग के लिए बना है, hybrid PDF support, balance verification, enrichment, ledger export, और non-ISO formats (CSV, OFX, QFX, MT940, PDF) सहित सात प्रारूपों में एकीकृत API के साथ। यदि आपको production-grade security के साथ DataFrames में बैंक स्टेटमेंट पार्स करने हैं, तो Bank Statement Parser का उपयोग करें। यदि आपको पूर्ण ISO 20022 message catalogue के साथ काम करना हो, तो pyiso20022 का उपयोग करें।

SWIFT ISO 20022 माइग्रेशन की समय सीमा क्या है?

SWIFT ने चरणबद्ध माइग्रेशन timeline प्रकाशित की है:

  • नवंबर 2026: Structured और hybrid addresses अनिवार्य हो जाएंगे। MT101 multi-instruction messages reject होंगे। Case Management Phase 1 शुरू होगा।
  • नवंबर 2027: सभी वित्तीय संस्थानों को CAMT.053 statements natively प्राप्त करने में सक्षम होना चाहिए। SWIFT MT को ISO format में convert करना बंद कर देगा।
  • नवंबर 2028: MT940, MT942, MT950, MT900, और MT910 की पूर्ण retirement। इन्हें CAMT.052, CAMT.053, और CAMT.054 equivalents से बदला जाएगा।

Bank Statement Parser पुराने MT940 format और आधुनिक CAMT.053/PAIN.001 formats दोनों सपोर्ट करता है, जो इसे transition period के लिए आदर्श बनाता है।