Bank Statement Parser

Mga Karaniwang Tanong Tungkol sa Bank Statement Parser

Privacy at Pagsunod ng Data

Mayroon bang anumang data na umalis sa aking imprastraktura?

Hindi. Bank Statement Parser ay gumagana bilang isang stateless library. Lahat ng pagpoproseso -- pag-parse, PII redaction, archive extraction -- nangyayari sa loob ng iyong lokal na runtime memory. Walang mga tawag sa API, walang mga serbisyo sa ulap, walang telemetry. Pinatigas ang mga XML parserno_network=True, hinaharangan ang lahat ng papalabas na access sa antas ng parser. Ang iyong data sa pananalapi ay hindi kailanman umaalis sa iyong kapaligiran.

Paano gumagana ang PII redaction?

Ang mga sensitibong field ay naka-mask bago maabot ang iyong lohika ng aplikasyon. Tinutukoy ng parser ang mga pangalan ng may utang, mga pangalan ng pinagkakautangan, mga IBAN, at mga postal address, na pinapalitan ang mga ito ng***REDACTED***sa console output at streaming mode.

  • Naka-on ang redaction bilang default sa CLI output at streaming mode.
  • Ang mga pag-export ng file (CSV, JSON, Excel) ay nagpapanatili ng hindi na-redact na data para sa downstream na pagproseso.
  • Mag-opt in sa buong data na may--show-piisa CLI oredact_pii=Falsesa API.

Deterministic ba ang proseso ng pagkuha?

Oo -- byte-parehong output sa bawat run. Dahil sa parehong input file, ang parser ay gumagawa ng parehong resulta sa bawat oras. Walang randomness, walang model inference, walang heuristic sampling. Ipinapatupad ng CI ang determinismo na may 467 na pagsubok sa 100% na saklaw ng sangay, kabilang ang pag-fuzzing batay sa ari-arian sa pamamagitan ng Hypothesis.

Anong mga pamantayan sa pagsunod ang sinusunod ng proyekto?

Ang proyekto ay nagpapanatili ng dokumentasyong nakahanay sa ISO 13485 na may ganap na kakayahang masubaybayan:

  • Isang quantified Risk Register na may kalubhaan/probability scoring at natitirang risk assessment.
  • Isang Verification at Validation Plan na may 19 na gated na hakbang sa 5 phase.
  • Isang Change Control Procedure na may impact assessment at rollback protocol.
  • Isang SOUP Register na sumasaklaw sa lahat ng dependency na may mga antas ng panganib at pagsubaybay sa EOL.
  • Isang Traceability Matrix na mga input ng disenyo ng pagmamapa sa pagpapatupad at pag-verify.

Ang bawat release ay may kasamang CycloneDX SBOM, SHA-256 checksums, at GitHub build provenance attestation.

Pagganap at Scalability

Gaano kabilis ang Bank Statement Parser?

Ang mga limitasyon ng pagganap ay napatunayan sa CI sa bawat commit:

Sukatan Halaga
CAMT.053 throughput 27,000+ transaksyon/segundo
PAIN.001 throughput 52,000+ transaksyon/segundo
Per-transaction latency (CAMT) 37 microseconds
Per-transaction latency (PAIN.001) 19 microseconds
Oras para sa unang resulta < 2 ms

Paano pinangangasiwaan ang malalaking file?

Pag-stream na may limitadong memory -- nasubok sa 50,000 mga transaksyon bawat file. Gamitinparse_streaming()upang iproseso ang mga XML file nang paunti-unti. Ang bawat transaksyon ay yielded bilang isang diksyunaryo; ang mga elemento ay na-clear pagkatapos ng pagproseso upang maiwasan ang paglaki ng memorya. Hindi nasusukat ang memorya sa laki ng file -- ang 50K-transaction test (25+ MB) ay gumagamit ng mas mababa sa 2x ng memorya ng 10K-transaction test.

Para sa mga file na lampas sa 50 MB (hal., mga host-to-host na PAIN.001 batch na may 100K+ na bayad), ang parser ay nag-stream sa pamamagitan ng isang pansamantalang file na may chunk-based namespace stripping -- ang buong dokumento ay hindi kailanman na-load sa memorya.

Paano pinoproseso nang ligtas ang mga ZIP archive?

iter_secure_xml_entries()pinapatunayan ang bawat miyembro bago ang pagkuha:

  • Cap ng laki ng entry (default na 10 MB bawat entry)
  • Kabuuang hindi naka-compress na cap ng laki (default na 50 MB)
  • Limitan ng ratio ng compression (default 100:1) upang maiwasan ang mga ZIP bomb
  • Naka-encrypt na pagtanggi sa pagpasok

Walang file na nakasulat sa disk. Ang mga XML byte ay direktang dumadaan sa parser sa pamamagitan ngfrom_bytes().

Maaari ba akong mag-parse ng maraming file nang magkatulad?

Oo. Gamitinparse_files_parallel()na namamahagi ng gawain sa aProcessPoolExecutor:

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

Mga Sinusuportahang Format

Aling mga format ng bank statement ang sinusuportahan?

Format Pamantayan Mga Uri ng File Klase ng Parser
CAMT.053 ISO 20022 Bank-to-Customer Statement .xml CamtParser
SAKIT.001 ISO 20022 Credit Transfer Initiation .xml Pain001Parser
CSV Mga generic na pag-export ng bangko .csv CsvStatementParser
OFX Buksan ang Financial Exchange .ofx OfxParser
QFX Pabilisin ang Financial Exchange .qfx QfxParser
MT940 pamantayan ng SWIFT .mt940, .sta Mt940Parser

Pinangangasiwaan ba ng parser ang mga dayalektong tukoy sa bangko ng CAMT.053?

Oo -- namespace-agnostic ayon sa disenyo. Tinatanggal ng parser ang mga XML namespace bago iproseso, pangasiwaan ang anumang variant ng CAMT.053 (camt.053.001.02, camt.053.001.04, o proprietary bank wrapper) na walang configuration na partikular sa namespace. Ang mga query ng XPath ay may target na istraktura ng elemento, hindi ang mga URI ng namespace.

Para sa mga bangko na bumabalot ng CAMT sa isang custom na sobre, gamitinfrom_string()ofrom_bytes()upang direktang pakainin ang panloob na dokumento.

Maaari ko bang imapa ang mga custom na CSV column header sa karaniwang schema?

Oo -- awtomatikong normalisasyon, zero configuration.CsvStatementParserkinikilala ang mga karaniwang pagkakaiba-iba ng header:"Date", "Transaction Date", "Booking Date"lahat ng mapa sadatepatlang."Amount", "Value", "Sum"mapa saamount. Hatiin ang mga column ng credit/debit (hal.,"Credit"at"Debit") ay awtomatikong nakita at pinagsama sa iisang nilagdaang halaga.

Ano ang format ng output?

Ang lahat ng mga parser ay gumagawa ng standardized pandas DataFrames na may pare-parehong mga uri ng column:

Format Mga Pangunahing Hanay
CAMT Amount, Currency, DrCr, Debtor, Creditor, Reference, ValDt, BookgDt, AccountId
SAKIT.001 PmtInfId, PmtMtd, InstdAmt, Currency, CdtrNm, EndToEndId, MsgId, CreDtTm, NbOfTxs
CSV/OFX/QFX/MT940 date, description, amount(na-normalize)

Maaari ka ring mag-export sa CSV, JSON, Excel, o mag-convert sa Polars DataFrames.

Mga Daloy ng Trabaho ng Treasury

Paano pinangangasiwaan ng parser ang mga multi-currency na pahayag?

Pinapanatili ng bawat transaksyon ang orihinal nitong pera -- walang implicit na conversion. AngCurrencyang field ay nakuha mula sa XMLCcykatangian sa bawat transaksyon. Ang mga multi-currency statement ay nananatiling ganoon. Angget_account_balances()Ang pamamaraan ay nagbabalik ng mga pagbubukas at pagsasara ng mga balanse sa bawat account na may orihinal na mga code ng pera. Ang cross-currency reconciliation ay naiwan sa iyong downstream logic, kung saan kinokontrol mo ang exchange rate source.

Sinusuportahan ba ng parser ang parehong papalabas at papasok na mga format?

Oo.Pain001Parserpinangangasiwaan ang ISO 20022 PAIN.001 na mga file ng pagsisimula ng paglilipat ng kredito (mga papalabas na pagbabayad).CamtParserpinangangasiwaan ang CAMT.053 bank-to-customer statement file (papasok na pag-uulat). Parehong sumusuporta sa streaming, PII redaction, at export sa CSV, JSON, at Excel. Gamitindetect_statement_format()upang awtomatikong matukoy ang format.

Ano ang mangyayari kapag mali ang porma ng entry ng transaksyon?

Ang pag-uugali ay nakasalalay sa mode ng pag-parse:

  • parse()(batch mode) -- Maling nabuong mga entry na nawawala ang mga kinakailangang field (Amount, Currency, oCdtDbtInd) ay nilaktawan gamit ang isang log ng babala. Ang natitirang bahagi ng pahayag ay normal na nag-parse.
  • parse_streaming()(streaming mode) -- Kumakalat kaagad ang mga error sa parse bilang mga exception. Walang tahimik na pagkawala ng data. Ang mabilis na pag-uugali na ito ay sinadya para sa mga daloy ng trabaho sa pananalapi kung saan dapat isaalang-alang ang bawat transaksyon.

Paano gumagana ang deduplication?

AngDeduplicatorNakikita ng klase ang mga eksaktong duplicate at pinaghihinalaang tugma na may maipaliwanag na mga marka ng kumpiyansa:

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

Pag-install at Pagkatugma

Paano ko i-install ang Bank Statement Parser?

pip install bankstatementparser

Para sa opsyonal na suporta sa Polars DataFrame:

pip install bankstatementparser[polars]

Aling mga bersyon ng Python ang sinusuportahan?

Python 3.9 hanggang 3.14. Ang lahat ng mga bersyon ay nasubok sa CI na may 467 na pagsubok sa 100% na saklaw ng sangay.

Ano ang mga dependency?

Ang library ay may 5 direktang dependencies:

  • lxml-- XML parsing na may security hardening -pandas-- Mga DataFrame at pagmamanipula ng data -openpyxl-- Export ng Excel -pydantic-- Pagpapatunay ng data at mga modelo -defusedxml-- Proteksyon ng XXE

Ang lahat ng mga dependency ay may SHA-256 hash-locked na mga bersyon. Ang CycloneDX SBOM ay nagmamapa ng bawat bahagi ng runtime.

Gumagana ba ito sa macOS, Linux, at Windows?

Oo. Gumagana ang library sa macOS, Linux, at Windows (sa pamamagitan ng WSL). Wala itong mga dependency na partikular sa platform.

Reproducibility at Seguridad

Paano ko mabe-verify ang reproducibility?

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

Anong mga proteksyon sa seguridad ang nakapaloob?

  • Proteksyon ng XXE:resolve_entities=False, no_network=True, load_dtd=False
  • ZIP Bomb Protection: Mga limitasyon sa ratio ng compression, mga takip ng laki ng entry, naka-encrypt na pagtanggi sa entry
  • Path Traversal Prevention: Mapanganib na pattern blocklist at resolution ng symlink
  • Input Validation: Mga limitasyon sa laki ng file (100 MB default), extension/format validation
  • Supply Chain: SHA-256 hash-locked dependencies, CycloneDX SBOM, build provenance attestation
  • Signed Commits: Ipinatupad sa CI

Paano inihambing ang Bank Statement Parser sa pyiso20022?

Ang pyiso20022 ay isang malawak na toolkit ng ISO 20022 na bumubuo ng mga dataclass ng Python mula sa mga ISO XML schemas. Sinasaklaw nito ang malawak na hanay ng mga uri ng mensahe ng ISO 20022 (PACS, PAIN, CAMT, ADMI) na may pagpapatunay ng schema. Ang Bank Statement Parser ay sadyang binuo para sa pag-parse ng bank statement na may suporta sa streaming, PII redaction, deduplication, at pinag-isang API sa anim na format kabilang ang mga non-ISO na format (CSV, OFX, QFX, MT940). Kung kailangan mong i-parse ang mga bank statement sa DataFrames na may seguridad sa antas ng produksyon, gamitin ang Bank Statement Parser. Kung kailangan mong magtrabaho kasama ang buong katalogo ng mensahe ng ISO 20022, gamitin ang pyiso20022.

Ano ang mga deadline ng paglipat ng SWIFT ISO 20022?

Nag-publish ang SWIFT ng isang phased migration timeline:

  • Nobyembre 2026: Nagiging mandatory ang mga structured at hybrid na address. Tatanggihan ang mga mensaheng multi-instruction ng MT101. Magsisimula ang Phase 1 ng Case Management.
  • Nobyembre 2027: Ang lahat ng institusyong pampinansyal ay dapat na makatanggap ng CAMT.053 na mga pahayag nang native. Ihihinto ng SWIFT ang pag-convert ng MT sa ISO na format.
  • Nobyembre 2028: Buong pagreretiro ng MT940, MT942, MT950, MT900, at MT910. Ang mga ito ay papalitan ng CAMT.052, CAMT.053, at CAMT.054 na katumbas.

Sinusuportahan ng Bank Statement Parser ang parehong legacy na MT940 na format at ang modernong CAMT.053/PAIN.001 na mga format, na ginagawa itong perpekto para sa panahon ng paglipat.