Confidențialitatea datelor și conformitate
Datele părăsesc infrastructura mea?
Nu. Analizorul de extrase bancare funcționează ca o bibliotecă fără stare. Toată procesarea -- analiză, mascare PII, extragere arhive -- are loc în memoria locală de execuție. Fără apeluri API, fără servicii cloud, fără telemetrie. Parserii XML sunt protejați cu no_network=True, blocând orice acces extern la nivel de parser. Datele dvs. financiare nu părăsesc niciodată mediul dvs.
Cum funcționează mascarea PII?
Câmpurile sensibile sunt mascate înainte de a ajunge la logica aplicației dvs. Parserul identifică numele debitorilor, numele creditorilor, IBAN-urile și adresele poștale, înlocuindu-le cu ***REDACTED*** în ieșirea consolei și în modul streaming.
- Mascarea este activată implicit în ieșirea CLI și modul streaming.
- Exporturile de fișiere (CSV, JSON, Excel) păstrează datele nemascate pentru procesarea ulterioară.
- Activați datele complete cu
--show-piidin CLI sauredact_pii=Falsedin API.
Procesul de extragere este determinist?
Da -- ieșire identică la nivel de octet la fiecare rulare. Cu același fișier de intrare, parserul produce același rezultat de fiecare dată. Fără aleatorism, fără inferență de model, fără eșantionare euristică. CI impune determinismul cu 467 de teste la acoperire 100% a ramurilor, inclusiv fuzzing bazat pe proprietăți prin Hypothesis.
Ce standarde de conformitate urmează proiectul?
Proiectul menține documentație aliniată la ISO 13485 cu trasabilitate completă:
- Un Registru de riscuri cuantificat cu scoruri de severitate/probabilitate și evaluare a riscului rezidual.
- Un Plan de verificare și validare cu 19 etape controlate în 5 faze.
- O Procedură de control al schimbărilor cu evaluarea impactului și protocoale de rollback.
- Un Registru SOUP care acoperă toate dependențele cu niveluri de risc și urmărire EOL.
- O Matrice de trasabilitate care mapează intrările de design la implementare și verificare.
Fiecare versiune include un SBOM CycloneDX, sume de verificare SHA-256 și atestare de proveniență a build-ului GitHub.
Performanță și scalabilitate
Cât de rapid este Analizorul de extrase bancare?
Pragurile de performanță sunt validate în CI la fiecare commit:
| Metrică | Valoare |
|---|---|
| Debit CAMT.053 | 27.000+ tranzacții/secundă |
| Debit PAIN.001 | 52.000+ tranzacții/secundă |
| Latență per tranzacție (CAMT) | 37 microsecunde |
| Latență per tranzacție (PAIN.001) | 19 microsecunde |
| Timp până la primul rezultat | < 2 ms |
Cum sunt gestionate fișierele mari?
Streaming cu memorie limitată -- testat cu 50.000 de tranzacții per fișier. Utilizați parse_streaming() pentru a procesa fișierele XML incremental. Fiecare tranzacție este returnată ca dicționar; elementele sunt șterse după procesare pentru a preveni creșterea memoriei. Memoria nu se scalează cu dimensiunea fișierului -- testul cu 50K tranzacții (25+ MB) folosește mai puțin de 2x memoria testului cu 10K tranzacții.
Pentru fișierele care depășesc 50 MB (de ex., loturi PAIN.001 host-to-host cu 100K+ plăți), parserul procesează streaming printr-un fișier temporar cu eliminare pe blocuri a spațiilor de nume -- documentul complet nu este niciodată încărcat în memorie.
Cum sunt procesate securizat arhivele ZIP?
iter_secure_xml_entries() validează fiecare membru înainte de extragere:
- Limita dimensiunii intrării (implicit 10 MB per intrare)
- Limita dimensiunii totale necomprimate (implicit 50 MB)
- Limita raportului de compresie (implicit 100:1) pentru prevenirea bombelor ZIP
- Respingerea intrărilor criptate
Niciun fișier nu este scris pe disc. Octeții XML trec direct la parser prin from_bytes().
Pot analiza mai multe fișiere în paralel?
Da. Utilizați parse_files_parallel() care distribuie munca pe un 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")
Formate suportate
Ce formate de extrase bancare sunt suportate?
| Format | Standard | Tipuri de fișiere | Clasă parser |
|---|---|---|---|
| CAMT.053 | ISO 20022 Extras bancă-către-client | .xml |
CamtParser |
| PAIN.001 | ISO 20022 Inițiere transfer de credit | .xml |
Pain001Parser |
| CSV | Exporturi bancare generice | .csv |
CsvStatementParser |
| OFX | Open Financial Exchange | .ofx |
OfxParser |
| QFX | Quicken Financial Exchange | .qfx |
QfxParser |
| MT940 | Standard SWIFT | .mt940, .sta |
Mt940Parser |
Parserul gestionează dialectele CAMT.053 specifice băncilor?
Da -- independent de spațiul de nume prin design. Parserul elimină spațiile de nume XML înainte de procesare, gestionând orice variantă CAMT.053 (camt.053.001.02, camt.053.001.04 sau wrapere proprietare ale băncilor) fără configurare specifică spațiului de nume. Interogările XPath vizează structura elementelor, nu URI-urile spațiilor de nume.
Pentru băncile care încapsulează CAMT într-un plic personalizat, utilizați from_string() sau from_bytes() pentru a furniza direct documentul interior.
Pot mapa antetele de coloane CSV personalizate la schema standard?
Da -- normalizare automată, zero configurare. CsvStatementParser recunoaște variații comune ale antetelor: "Date", "Transaction Date", "Booking Date" se mapează toate la câmpul date. "Amount", "Value", "Sum" se mapează la amount. Coloanele separate credit/debit (de ex., "Credit" și "Debit") sunt detectate și combinate automat într-o sumă cu semn unic.
Care este formatul de ieșire?
Toți parserii produc DataFrames pandas standardizate cu tipuri de coloane consistente:
| Format | Coloane cheie |
|---|---|
| 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 (normalizate) |
Puteți exporta și în CSV, JSON, Excel sau converti în DataFrames Polars.
Fluxuri de trezorerie
Cum gestionează parserul extrasele multi-valutare?
Fiecare tranzacție păstrează moneda originală -- fără conversie implicită. Câmpul Currency este extras din atributul XML Ccy per tranzacție. Extrasele multi-valutare rămân neschimbate. Metoda get_account_balances() returnează soldurile de deschidere și închidere per cont cu codurile de monedă originale. Reconcilierea inter-valutară este lăsată logicii dvs. ulterioare, unde controlați sursa cursului de schimb.
Parserul suportă atât formatele de ieșire, cât și cele de intrare?
Da. Pain001Parser gestionează fișierele ISO 20022 PAIN.001 de inițiere a transferurilor de credit (plăți efectuate). CamtParser gestionează fișierele CAMT.053 de extras bancă-către-client (raportare primită). Ambele suportă streaming, mascare PII și export în CSV, JSON și Excel. Utilizați detect_statement_format() pentru a identifica automat formatul.
Ce se întâmplă când o intrare de tranzacție este malformată?
Comportamentul depinde de modul de analiză:
parse()(mod batch) -- Intrările malformate cărora le lipsesc câmpuri obligatorii (Amount,CurrencysauCdtDbtInd) sunt ignorate cu un avertisment în jurnal. Restul extrasului se analizează normal.parse_streaming()(mod streaming) -- Erorile de analiză se propagă imediat ca excepții. Fără pierdere silențioasă de date. Acest comportament fail-fast este intenționat pentru fluxurile financiare unde fiecare tranzacție trebuie contabilizată.
Cum funcționează deduplicarea?
Clasa Deduplicator detectează duplicate exacte și potriviri suspecte cu scoruri de încredere explicabile:
from bankstatementparser import CamtParser, Deduplicator
parser = CamtParser("statement.xml")
dedup = Deduplicator()
result = dedup.deduplicate(dedup.from_dataframe(parser.parse()))
print(f"Unice: {len(result.unique_transactions)}")
print(f"Duplicate exacte: {len(result.exact_duplicates)}")
print(f"Potriviri suspecte: {len(result.suspected_matches)}")
Instalare și compatibilitate
Cum instalez Analizorul de extrase bancare?
pip install bankstatementparser
Pentru suport opțional DataFrame Polars:
pip install bankstatementparser[polars]
Ce versiuni de Python sunt suportate?
Python 3.9 până la 3.14. Toate versiunile sunt testate în CI cu 467 de teste la acoperire 100% a ramurilor.
Care sunt dependențele?
Biblioteca are 5 dependențe directe:
lxml-- analiză XML cu protecție de securitatepandas-- DataFrames și manipulare dateopenpyxl-- export Excelpydantic-- validare date și modeledefusedxml-- protecție XXE
Toate dependențele au versiuni blocate cu hash SHA-256. SBOM-ul CycloneDX mapează fiecare componentă de rulare.
Funcționează pe macOS, Linux și Windows?
Da. Biblioteca funcționează pe macOS, Linux și Windows (via WSL). Nu are dependențe specifice platformei.
Reproductibilitate și securitate
Cum pot verifica reproductibilitatea?
python -m pytest # 467 teste, acoperire 100% a ramurilor
python scripts/verify_locked_hashes.py # Verificare hash SHA-256
git log --show-signature -1 # Verificare semnătură commit
Ce protecții de securitate sunt integrate?
- Protecție XXE:
resolve_entities=False,no_network=True,load_dtd=False - Protecție împotriva bombelor ZIP: Limite ale raportului de compresie, limite de dimensiune ale intrărilor, respingerea intrărilor criptate
- Prevenirea traversării căilor: Listă de blocare a tiparelor periculoase și rezolvarea legăturilor simbolice
- Validarea datelor de intrare: Limite de dimensiune a fișierelor (100 MB implicit), validare extensie/format
- Lanț de aprovizionare: Dependențe blocate cu hash SHA-256, SBOM CycloneDX, atestare de proveniență a build-ului
- Commit-uri semnate: Impuse în CI
Cum se compară Analizorul de extrase bancare cu pyiso20022?
pyiso20022 este un set de instrumente ISO 20022 larg care generează dataclase Python din schemele XML ISO. Acoperă o gamă largă de tipuri de mesaje ISO 20022 (PACS, PAIN, CAMT, ADMI) cu validare de schemă. Analizorul de extrase bancare este construit special pentru analiza extraselor bancare cu suport streaming, mascare PII, deduplicare și un API unificat pentru șase formate, inclusiv formate non-ISO (CSV, OFX, QFX, MT940). Dacă trebuie să analizați extrase bancare în DataFrames cu securitate de nivel producție, utilizați Analizorul de extrase bancare. Dacă trebuie să lucrați cu catalogul complet de mesaje ISO 20022, utilizați pyiso20022.
Care sunt termenele de migrare SWIFT ISO 20022?
SWIFT a publicat un calendar de migrare eșalonat:
- Noiembrie 2026: Adresele structurate și hibride devin obligatorii. Mesajele MT101 cu instrucțiuni multiple vor fi respinse. Faza 1 a Gestionării cazurilor începe.
- Noiembrie 2027: Toate instituțiile financiare trebuie să poată primi extrase CAMT.053 nativ. SWIFT va înceta conversia din format MT în ISO.
- Noiembrie 2028: Retragerea completă a MT940, MT942, MT950, MT900 și MT910. Acestea vor fi înlocuite de echivalentele CAMT.052, CAMT.053 și CAMT.054.
Analizorul de extrase bancare suportă atât formatul vechi MT940, cât și formatele moderne CAMT.053/PAIN.001, făcându-l ideal pentru perioada de tranziție.