প্রশ্নোত্তর

ব্যাংক স্টেটমেন্ট পার্সার সম্পর্কে সাধারণ প্রশ্ন

ডেটা গোপনীয়তা ও কমপ্লায়েন্স

কোনো ডেটা কি আমার ইনফ্রাস্ট্রাকচার ছেড়ে যায়?

না। ব্যাংক স্টেটমেন্ট পার্সার একটি স্টেটলেস লাইব্রেরি হিসেবে কাজ করে। সকল প্রক্রিয়াকরণ -- বিশ্লেষণ, PII মাস্কিং, আর্কাইভ নিষ্কাশন -- আপনার স্থানীয় রানটাইম মেমরিতে ঘটে। কোনো API কল নেই, কোনো ক্লাউড সেবা নেই, কোনো টেলিমেট্রি নেই। XML পার্সারগুলি no_network=True দিয়ে শক্তিশালী করা হয়েছে, পার্সার স্তরে সকল আউটবাউন্ড অ্যাক্সেস ব্লক করে। আপনার আর্থিক ডেটা কখনও আপনার পরিবেশ ছেড়ে যায় না।

PII মাস্কিং কীভাবে কাজ করে?

সংবেদনশীল ক্ষেত্রগুলি আপনার অ্যাপ্লিকেশন লজিকে পৌঁছানোর আগেই মাস্ক করা হয়। পার্সার ডেবিটরের নাম, ক্রেডিটরের নাম, IBAN এবং পোস্টাল ঠিকানা শনাক্ত করে, কনসোল আউটপুট এবং স্ট্রিমিং মোডে সেগুলি ***REDACTED*** দিয়ে প্রতিস্থাপন করে।

  • মাস্কিং ডিফল্টে চালু CLI আউটপুট এবং স্ট্রিমিং মোডে।
  • ফাইল রপ্তানি (CSV, JSON, Excel) ডাউনস্ট্রিম প্রক্রিয়াকরণের জন্য মাস্ক না করা ডেটা ধরে রাখে।
  • CLI-তে --show-pii বা API-তে redact_pii=False দিয়ে সম্পূর্ণ ডেটা দেখুন

নিষ্কাশন প্রক্রিয়া কি ডিটারমিনিস্টিক?

হ্যাঁ -- প্রতিটি রানে বাইট-অভিন্ন আউটপুট। একই ইনপুট ফাইল দিলে, পার্সার প্রতিবার একই ফলাফল তৈরি করে। কোনো এলোমেলোতা নেই, কোনো মডেল ইনফারেন্স নেই, কোনো হিউরিস্টিক স্যাম্পলিং নেই। CI ৪৬৭ টেস্ট দিয়ে ১০০% ব্রাঞ্চ কভারেজে ডিটারমিনিজম প্রয়োগ করে, Hypothesis-এর মাধ্যমে প্রপার্টি-বেসড ফাজিংসহ।

প্রকল্পটি কোন কমপ্লায়েন্স স্ট্যান্ডার্ড অনুসরণ করে?

প্রকল্পটি সম্পূর্ণ ট্রেসেবিলিটিসহ ISO 13485-সারিবদ্ধ ডকুমেন্টেশন বজায় রাখে:

  • তীব্রতা/সম্ভাবনা স্কোরিং এবং অবশিষ্ট ঝুঁকি মূল্যায়নসহ একটি পরিমাণগত ঝুঁকি রেজিস্টার
  • ৫টি পর্যায়ে ১৯টি গেটেড ধাপসহ একটি যাচাই ও বৈধতা পরিকল্পনা
  • প্রভাব মূল্যায়ন এবং রোলব্যাক প্রোটোকলসহ একটি পরিবর্তন নিয়ন্ত্রণ পদ্ধতি
  • ঝুঁকি স্তর এবং EOL ট্র্যাকিংসহ সকল ডিপেন্ডেন্সি কভার করে একটি SOUP রেজিস্টার
  • ডিজাইন ইনপুট থেকে বাস্তবায়ন এবং যাচাই পর্যন্ত ম্যাপ করে একটি ট্রেসেবিলিটি ম্যাট্রিক্স

প্রতিটি রিলিজে একটি CycloneDX SBOM, SHA-256 চেকসাম, এবং GitHub বিল্ড প্রোভেন্যান্স অ্যাটেস্টেশন অন্তর্ভুক্ত।

পারফরম্যান্স ও স্কেলেবিলিটি

ব্যাংক স্টেটমেন্ট পার্সার কতটা দ্রুত?

প্রতিটি কমিটে CI-তে পারফরম্যান্স থ্রেশহোল্ড যাচাই করা হয়:

মেট্রিক মান
CAMT.053 থ্রুপুট ২৭,০০০+ লেনদেন/সেকেন্ড
PAIN.001 থ্রুপুট ৫২,০০০+ লেনদেন/সেকেন্ড
প্রতি-লেনদেন লেটেন্সি (CAMT) ৩৭ মাইক্রোসেকেন্ড
প্রতি-লেনদেন লেটেন্সি (PAIN.001) ১৯ মাইক্রোসেকেন্ড
প্রথম ফলাফলের সময় < ২ ms

বড় ফাইলগুলি কীভাবে পরিচালনা করা হয়?

সীমিত মেমরিসহ স্ট্রিমিং -- প্রতি ফাইলে ৫০,০০০ লেনদেনে পরীক্ষিত। XML ফাইলগুলি ক্রমবর্ধমানভাবে প্রক্রিয়া করতে parse_streaming() ব্যবহার করুন। প্রতিটি লেনদেন একটি ডিকশনারি হিসেবে ইয়েল্ড করা হয়; প্রক্রিয়াকরণের পর এলিমেন্টগুলি ক্লিয়ার করা হয় মেমরি বৃদ্ধি রোধ করতে। ফাইল সাইজের সাথে মেমরি বাড়ে না -- ৫০K-লেনদেন টেস্ট (২৫+ MB) ১০K-লেনদেন টেস্টের ২x-এর কম মেমরি ব্যবহার করে।

৫০ MB-এর বেশি ফাইলের জন্য (যেমন, ১০০K+ পেমেন্টসহ host-to-host PAIN.001 ব্যাচ), পার্সার চাঙ্ক-ভিত্তিক নেমস্পেস স্ট্রিপিংসহ একটি অস্থায়ী ফাইলের মাধ্যমে স্ট্রিম করে -- সম্পূর্ণ ডকুমেন্ট কখনও মেমরিতে লোড হয় না।

ZIP আর্কাইভগুলি কীভাবে নিরাপদে প্রক্রিয়া করা হয়?

iter_secure_xml_entries() নিষ্কাশনের আগে প্রতিটি সদস্য যাচাই করে:

  • এন্ট্রি সাইজ ক্যাপ (ডিফল্ট প্রতি এন্ট্রিতে ১০ MB)
  • মোট আনকম্প্রেসড সাইজ ক্যাপ (ডিফল্ট ৫০ MB)
  • ZIP বম্ব প্রতিরোধে কম্প্রেশন অনুপাত সীমা (ডিফল্ট ১০০:১)
  • এনক্রিপ্টেড এন্ট্রি প্রত্যাখ্যান

কোনো ফাইল ডিস্কে লেখা হয় না। XML বাইটগুলি from_bytes() এর মাধ্যমে সরাসরি পার্সারে যায়।

আমি কি একসাথে একাধিক ফাইল বিশ্লেষণ করতে পারি?

হ্যাঁ। 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")

সমর্থিত ফরম্যাট

কোন ব্যাংক স্টেটমেন্ট ফরম্যাটগুলি সমর্থিত?

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

পার্সার কি CAMT.053-এর ব্যাংক-নির্দিষ্ট ডায়ালেক্ট পরিচালনা করে?

হ্যাঁ -- ডিজাইনে নেমস্পেস-অজ্ঞেয়বাদী। পার্সার প্রক্রিয়াকরণের আগে XML নেমস্পেস স্ট্রিপ করে, নেমস্পেস-নির্দিষ্ট কনফিগারেশন ছাড়াই যেকোনো CAMT.053 ভেরিয়েন্ট (camt.053.001.02, camt.053.001.04, বা মালিকানাধীন ব্যাংক র‍্যাপার) পরিচালনা করে। XPath কোয়েরি এলিমেন্ট কাঠামো টার্গেট করে, নেমস্পেস URI নয়।

যেসব ব্যাংক CAMT কে কাস্টম এনভেলপে র‍্যাপ করে, তাদের জন্য ভেতরের ডকুমেন্ট সরাসরি ফিড করতে from_string() বা from_bytes() ব্যবহার করুন।

আমি কি কাস্টম CSV কলাম হেডারগুলি স্ট্যান্ডার্ড স্কিমায় ম্যাপ করতে পারি?

হ্যাঁ -- স্বয়ংক্রিয় নরমালাইজেশন, শূন্য কনফিগারেশন। CsvStatementParser সাধারণ হেডার ভেরিয়েশন চিনতে পারে: "Date", "Transaction Date", "Booking Date" সবই date ক্ষেত্রে ম্যাপ করে। "Amount", "Value", "Sum" amount-এ ম্যাপ করে। বিভক্ত ক্রেডিট/ডেবিট কলাম (যেমন, "Credit" এবং "Debit") স্বয়ংক্রিয়ভাবে সনাক্ত করা হয় এবং একটি একক সাইনড পরিমাণে একত্রিত করা হয়।

আউটপুট ফরম্যাট কী?

সকল পার্সার সামঞ্জস্যপূর্ণ কলাম টাইপসহ স্ট্যান্ডার্ডাইজড pandas DataFrames তৈরি করে:

ফরম্যাট প্রধান কলাম
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 (নরমালাইজড)

আপনি CSV, JSON, Excel-এ রপ্তানি বা Polars DataFrames-এ রূপান্তরও করতে পারেন।

ট্রেজারি ওয়ার্কফ্লো

পার্সার কীভাবে বহু-মুদ্রা স্টেটমেন্ট পরিচালনা করে?

প্রতিটি লেনদেন তার মূল মুদ্রা সংরক্ষণ করে -- কোনো অন্তর্নিহিত রূপান্তর নেই। Currency ক্ষেত্রটি প্রতি লেনদেনে XML Ccy অ্যাট্রিবিউট থেকে বের করা হয়। বহু-মুদ্রা স্টেটমেন্ট যেমন আছে তেমনই থাকে। get_account_balances() মেথড মূল মুদ্রা কোডসহ প্রতি অ্যাকাউন্টের ওপেনিং এবং ক্লোজিং ব্যালেন্স রিটার্ন করে। ক্রস-কারেন্সি রিকনসিলিয়েশন আপনার ডাউনস্ট্রিম লজিকে ছেড়ে দেওয়া হয়, যেখানে আপনি এক্সচেঞ্জ রেটের উৎস নিয়ন্ত্রণ করেন।

পার্সার কি আউটগোয়িং এবং ইনকামিং উভয় ফরম্যাট সমর্থন করে?

হ্যাঁ। Pain001Parser ISO 20022 PAIN.001 ক্রেডিট ট্রান্সফার ইনিশিয়েশন ফাইল (আউটগোয়িং পেমেন্ট) পরিচালনা করে। CamtParser CAMT.053 bank-to-customer স্টেটমেন্ট ফাইল (ইনকামিং রিপোর্টিং) পরিচালনা করে। উভয়ই স্ট্রিমিং, PII মাস্কিং, এবং CSV, JSON ও Excel-এ রপ্তানি সমর্থন করে। ফরম্যাট স্বয়ংক্রিয়ভাবে শনাক্ত করতে detect_statement_format() ব্যবহার করুন।

একটি লেনদেন এন্ট্রি ত্রুটিপূর্ণ হলে কী ঘটে?

আচরণ বিশ্লেষণ মোডের উপর নির্ভর করে:

  • parse() (ব্যাচ মোড) -- প্রয়োজনীয় ক্ষেত্র (Amount, Currency, বা CdtDbtInd) অনুপস্থিত ত্রুটিপূর্ণ এন্ট্রিগুলি একটি সতর্কতা লগসহ এড়িয়ে যাওয়া হয়। বাকি স্টেটমেন্ট স্বাভাবিকভাবে বিশ্লেষিত হয়।
  • parse_streaming() (স্ট্রিমিং মোড) -- বিশ্লেষণ ত্রুটিগুলি অবিলম্বে এক্সেপশন হিসেবে প্রচারিত হয়। কোনো নীরব ডেটা হারানো হয় না। এই ফেইল-ফাস্ট আচরণ আর্থিক ওয়ার্কফ্লোর জন্য ইচ্ছাকৃত যেখানে প্রতিটি লেনদেনের হিসাব রাখতে হয়।

ডিডুপ্লিকেশন কীভাবে কাজ করে?

Deduplicator ক্লাস ব্যাখ্যাযোগ্য কনফিডেন্স স্কোরসহ সঠিক ডুপ্লিকেট এবং সন্দেহভাজন মিল সনাক্ত করে:

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

ইনস্টলেশন ও সামঞ্জস্যতা

আমি কীভাবে ব্যাংক স্টেটমেন্ট পার্সার ইনস্টল করব?

pip install bankstatementparser

ঐচ্ছিক Polars DataFrame সমর্থনের জন্য:

pip install bankstatementparser[polars]

কোন Python সংস্করণগুলি সমর্থিত?

Python 3.9 থেকে 3.14। সকল সংস্করণ CI-তে ৪৬৭ টেস্টে ১০০% ব্রাঞ্চ কভারেজে পরীক্ষিত।

ডিপেন্ডেন্সিগুলি কী কী?

লাইব্রেরিতে ৫টি সরাসরি ডিপেন্ডেন্সি রয়েছে:

  • lxml -- নিরাপত্তা সুরক্ষাসহ XML বিশ্লেষণ
  • pandas -- DataFrames এবং ডেটা ম্যানিপুলেশন
  • openpyxl -- Excel রপ্তানি
  • pydantic -- ডেটা যাচাই এবং মডেল
  • defusedxml -- XXE সুরক্ষা

সকল ডিপেন্ডেন্সিতে SHA-256 হ্যাশ-লকড সংস্করণ রয়েছে। CycloneDX SBOM প্রতিটি রানটাইম কম্পোনেন্ট ম্যাপ করে।

এটি কি macOS, Linux এবং Windows-এ কাজ করে?

হ্যাঁ। লাইব্রেরিটি macOS, Linux এবং Windows-এ (WSL-এর মাধ্যমে) কাজ করে। এর কোনো প্ল্যাটফর্ম-নির্দিষ্ট ডিপেন্ডেন্সি নেই।

পুনরুৎপাদনযোগ্যতা ও নিরাপত্তা

আমি কীভাবে পুনরুৎপাদনযোগ্যতা যাচাই করতে পারি?

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

কোন নিরাপত্তা সুরক্ষা বিল্ট-ইন?

  • XXE সুরক্ষা: resolve_entities=False, no_network=True, load_dtd=False
  • ZIP বম্ব সুরক্ষা: কম্প্রেশন অনুপাত সীমা, এন্ট্রি সাইজ ক্যাপ, এনক্রিপ্টেড এন্ট্রি প্রত্যাখ্যান
  • পাথ ট্রাভার্সাল প্রতিরোধ: বিপজ্জনক প্যাটার্ন ব্লকলিস্ট এবং সিমলিংক রেজোলিউশন
  • ইনপুট যাচাই: ফাইল সাইজ সীমা (ডিফল্ট ১০০ MB), এক্সটেনশন/ফরম্যাট যাচাই
  • সাপ্লাই চেইন: SHA-256 হ্যাশ-লকড ডিপেন্ডেন্সি, CycloneDX SBOM, বিল্ড প্রোভেন্যান্স অ্যাটেস্টেশন
  • সাইনড কমিট: CI-তে প্রয়োগকৃত

ব্যাংক স্টেটমেন্ট পার্সার pyiso20022-এর সাথে কীভাবে তুলনা করে?

pyiso20022 হলো একটি ব্যাপক ISO 20022 টুলকিট যা ISO XML স্কিমা থেকে Python dataclasses তৈরি করে। এটি স্কিমা যাচাইসহ বিস্তৃত ISO 20022 মেসেজ টাইপ (PACS, PAIN, CAMT, ADMI) কভার করে। ব্যাংক স্টেটমেন্ট পার্সার স্ট্রিমিং সমর্থন, PII মাস্কিং, ডিডুপ্লিকেশন, এবং নন-ISO ফরম্যাট (CSV, OFX, QFX, MT940) সহ ছয়টি ফরম্যাটে একটি সমন্বিত API সহ ব্যাংক স্টেটমেন্ট বিশ্লেষণের জন্য বিশেষভাবে তৈরি। প্রোডাকশন-গ্রেড নিরাপত্তাসহ ব্যাংক স্টেটমেন্ট DataFrames-এ বিশ্লেষণ করতে হলে ব্যাংক স্টেটমেন্ট পার্সার ব্যবহার করুন। সম্পূর্ণ ISO 20022 মেসেজ ক্যাটালগ নিয়ে কাজ করতে হলে pyiso20022 ব্যবহার করুন।

SWIFT ISO 20022 মাইগ্রেশনের সময়সীমা কী?

SWIFT একটি পর্যায়ক্রমিক মাইগ্রেশন সময়রেখা প্রকাশ করেছে:

  • নভেম্বর ২০২৬: কাঠামোগত ও হাইব্রিড ঠিকানা বাধ্যতামূলক হবে। MT101 মাল্টি-ইনস্ট্রাকশন মেসেজ প্রত্যাখ্যাত হবে। কেস ম্যানেজমেন্ট ফেজ ১ শুরু হবে।
  • নভেম্বর ২০২৭: সকল আর্থিক প্রতিষ্ঠানকে স্থানীয়ভাবে CAMT.053 স্টেটমেন্ট গ্রহণ করতে সক্ষম হতে হবে। SWIFT MT থেকে ISO ফরম্যাটে রূপান্তর বন্ধ করবে।
  • নভেম্বর ২০২৮: MT940, MT942, MT950, MT900 এবং MT910-এর সম্পূর্ণ অবসর। এগুলি CAMT.052, CAMT.053 এবং CAMT.054 সমতুল্য দ্বারা প্রতিস্থাপিত হবে।

ব্যাংক স্টেটমেন্ট পার্সার পুরানো MT940 ফরম্যাট এবং আধুনিক CAMT.053/PAIN.001 ফরম্যাট উভয়ই সমর্থন করে, যা এটিকে রূপান্তর সময়কালের জন্য আদর্শ করে তোলে।