Datasekretess och efterlevnad
Lämnar någon data min infrastruktur?
Nej. Kontoutdragsparser fungerar som ett statslöst bibliotek. All bearbetning - parsning, PII-redigering, arkivextraktion - sker i ditt lokala körtidsminne. Inga API-anrop, inga molntjänster, ingen telemetri. XML-tolkare är härdade medno_network=True, blockerar all utgående åtkomst på parsernivå. Dina ekonomiska data lämnar aldrig din miljö.
Hur fungerar PII-redigering?
Känsliga fält maskeras innan de når din applikationslogik. Parsern identifierar gäldenärsnamn, borgenärsnamn, IBAN och postadresser och ersätter dem med***REDACTED***i konsolutgång och streamingläge.
- Redaktion är på som standard i CLI-utgång och streamingläge.
- Filexport (CSV, JSON, Excel) behåller oredigerade data för nedströmsbehandling.
- Välj in för fullständig data med
--show-piipå CLI ellerredact_pii=Falsei API:t.
Är extraktionsprocessen deterministisk?
Ja -- byte-identisk utdata vid varje körning. Givet samma indatafil, producerar parsern samma resultat varje gång. Ingen slumpmässighet, ingen modellinferens, ingen heuristisk sampling. CI upprätthåller determinism med 467 tester med 100 % filialtäckning, inklusive egendomsbaserad fuzzing via Hypothesis.
Vilka efterlevnadsstandarder följer projektet?
Projektet upprätthåller ISO 13485-anpassad dokumentation med full spårbarhet:
- Ett kvantifierat Riskregister med allvarlighets-/sannolikhetspoäng och kvarstående riskbedömning.
- En Verifiering och valideringsplan med 19 gated steg över 5 faser.
- En Procedur för förändringskontroll med konsekvensbedömning och återställningsprotokoll.
- Ett SOUP Register som täcker alla beroenden med risknivåer och EOL-spårning.
- En Spårbarhetsmatris kartlägger designingångar till implementering och verifiering.
Varje utgåva inkluderar en CycloneDX SBOM, SHA-256-kontrollsummor och GitHub-byggt härkomstintyg.
Prestanda och skalbarhet
Hur snabb är Kontoutdragsparser?
Prestationströsklar valideras i CI vid varje commit:
| Metrisk | Värde |
|---|---|
| CAMT.053 genomströmning | 27 000+ transaktioner/sekund |
| PAIN.001 genomströmning | 52 000+ transaktioner/sekund |
| Latens per transaktion (CAMT) | 37 mikrosekunder |
| Latens per transaktion (PAIN.001) | 19 mikrosekunder |
| Dags för första resultat | < 2 ms |
Hur hanteras stora filer?
Streaming med begränsat minne -- testade vid 50 000 transaktioner per fil. Användparse_streaming()för att bearbeta XML-filer stegvis. Varje transaktion ges som en ordbok; element rensas efter bearbetning för att förhindra minnestillväxt. Minnet skalas inte med filstorleken - 50K-transaktionstestet (25+ MB) använder mindre än 2x minnet av 10K-transaktionstestet.
För filer som överstiger 50 MB (t.ex. värd-till-värd PAIN.001-batcher med 100 000+ betalningar), strömmar parsern genom en temporär fil med chunk-baserad namnrymdstrippning -- hela dokumentet laddas aldrig in i minnet.
Hur behandlas ZIP-arkiv säkert?
iter_secure_xml_entries()validerar varje medlem innan extrahering:
- Entry size cap (standard 10 MB per post)
- Totalt okomprimerat storlekstak (standard 50 MB)
- Kompressionsförhållandegräns (standard 100:1) för att förhindra ZIP-bomber
- Krypterad inmatningsavvisning
Ingen fil skrivs till disken. XML-bytes skickas direkt till parsern viafrom_bytes().
Kan jag analysera flera filer parallellt?
Ja. Användparse_files_parallel()som fördelar arbete över enProcessPoolExecutor:
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")
Format som stöds
Vilka kontoutdragsformat stöds?
| Formatera | Standard | Filtyper | Parser klass |
|---|---|---|---|
| CAMT.053 | ISO 20022 bank-till-kund-uttalande | .xml |
CamtParser |
| PAIN.001 | Initiering av tillgodoräknande enligt ISO 20022 | .xml |
Pain001Parser |
| CSV | Generisk bankexport | .csv |
CsvStatementParser |
| OFX | Öppna finansiell börs | .ofx |
OfxParser |
| QFX | Quicken Financial Exchange | .qfx |
QfxParser |
| MT940 | SWIFT standard | .mt940, .sta |
Mt940Parser |
Hanterar parsern bankspecifika dialekter av CAMT.053?
Ja -- namnrymds-agnostisk av design. Parsern tar bort XML-namnrymder innan bearbetning och hanterar alla CAMT.053-varianter (camt.053.001.02, camt.053.001.04, eller proprietära bankomslag) utan namnområdesspecifik konfiguration. XPath-frågor målelementstruktur, inte namnområdes-URI.
För banker som slår in CAMT i ett anpassat kuvert, användfrom_string()ellerfrom_bytes()för att mata det inre dokumentet direkt.
Kan jag mappa anpassade CSV-kolumnrubriker till standardschemat?
Ja -- automatisk normalisering, nollkonfiguration.CsvStatementParserkänner igen vanliga rubrikvarianter:"Date", "Transaction Date", "Booking Date"alla kartor tilldatefält."Amount", "Value", "Sum"karta tillamount. Dela kredit-/debetkolumner (t.ex."Credit"och"Debit") upptäcks och kombineras automatiskt till ett enda signerat belopp.
Vad är utdataformatet?
Alla parsers producerar standardiserade pandas DataFrames med konsekventa kolumntyper:
| Formatera | Nyckelkolumner |
|---|---|
| CAMT | Amount, Currency, DrCr, Debtor, Creditor, Reference, ValDt, BookgDt, AccountId |
| PIN.001 | PmtInfId, PmtMtd, InstdAmt, Currency, CdtrNm, EndToEndId, MsgId, CreDtTm, NbOfTxs |
| CSV/OFX/QFX/MT940 | date, description, amount(normaliserad) |
Du kan också exportera till CSV, JSON, Excel eller konvertera till Polars DataFrames.
Treasury arbetsflöden
Hur hanterar tolken uttalanden i flera valutor?
Varje transaktion behåller sin ursprungliga valuta -- ingen implicit konvertering. DenCurrencyfältet extraheras från XMLCcyattribut per transaktion. Utdrag i flera valutor förblir som de är. Deget_account_balances()metod returnerar ingående och utgående balanser per konto med ursprungliga valutakoder. Valutaavstämning överlåts till din nedströmslogik, där du kontrollerar växelkurskällan.
Stöder parsern både utgående och inkommande format?
Ja.Pain001Parserhanterar ISO 20022 PAIN.001 initieringsfiler för kreditöverföringar (utgående betalningar).CamtParserhanterar CAMT.053 bank-till-kund-utdragsfiler (inkommande rapportering). Båda stöder streaming, PII-redigering och export till CSV, JSON och Excel. Användadetect_statement_format()för att identifiera formatet automatiskt.
Vad händer när en transaktionspost är felaktig?
Beteende beror på analysläget:
parse()(batchläge) -- Felaktiga poster saknar obligatoriska fält (Amount,Currency, ellerCdtDbtInd) hoppas över med en varningslogg. Resten av påståendet tolkas normalt. -parse_streaming()(strömningsläge) -- Analysfel sprids omedelbart som undantag. Ingen tyst dataförlust. Detta misslyckade beteende är avsiktligt för finansiella arbetsflöden där varje transaktion måste redovisas.
Hur fungerar deduplicering?
DeDeduplicatorklass upptäcker exakta dubbletter och misstänkta matchningar med förklarliga konfidenspoäng:
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)}")
Installation och kompatibilitet
Hur installerar jag Kontoutdragsparser?
pip install bankstatementparser
För valfritt Polars DataFrame-stöd:
pip install bankstatementparser[polars]
Vilka Python-versioner stöds?
Python 3.9 till 3.14. Alla versioner är testade i CI med 467 tester med 100 % grentäckning.
Vilka är beroenden?
Biblioteket har 5 direkta beroenden:
lxml-- XML-tolkning med säkerhetshärdning -pandas-- Dataramar och datamanipulation -openpyxl-- Excel export -pydantic-- Datavalidering och modeller -defusedxml-- XXE skydd
Alla beroenden har SHA-256 hash-låsta versioner. CycloneDX SBOM mappar varje runtime-komponent.
Fungerar det på macOS, Linux och Windows?
Ja. Biblioteket fungerar på macOS, Linux och Windows (via WSL). Den har inga plattformsspecifika beroenden.
Reproducerbarhet och säkerhet
Hur kan jag verifiera reproducerbarhet?
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
Vilka säkerhetsskydd är inbyggda?
- XXE-skydd:
resolve_entities=False,no_network=True,load_dtd=False - ZIP Bomb Protection: Kompressionsförhållandegränser, inträdesstorlekstak, krypterad inträdesavvisning
- Path Traversal Prevention: Spärrlista för farliga mönster och symlinkupplösning
- Indatavalidering: Filstorleksgränser (100 MB standard), tilläggs-/formatvalidering
- Supply Chain: SHA-256 hash-låsta beroenden, CycloneDX SBOM, bygg härkomstintyg
- Signerade åtaganden: Tillämpas i CI
Hur jämför kontoutdrag Parser med pyiso20022?
pyiso20022 är en bred ISO 20022-verktygssats som genererar Python-dataklasser från ISO XML-scheman. Den täcker ett brett utbud av ISO 20022 meddelandetyper (PACS, PAIN, CAMT, ADMI) med schemavalidering. Kontoutdragsparser är specialbyggd för att analysera kontoutdrag med stöd för streaming, PII-redigering, deduplicering och ett enhetligt API över sex format inklusive icke-ISO-format (CSV, OFX, QFX, MT940). Om du behöver tolka kontoutdrag till DataFrames med säkerhet i produktionsklass, använd Kontoutdragsparser. Om du behöver arbeta med hela ISO 20022-meddelandekatalogen, använd pyiso20022.
Vilka är deadlines för SWIFT ISO 20022-migrering?
SWIFT har publicerat en tidslinje för stegvis migrering:
- November 2026: Strukturerade och hybridadresser blir obligatoriska. MT101 multi-instruktionsmeddelanden kommer att avvisas. Ärendehantering Fas 1 börjar.
- November 2027: Alla finansiella institutioner måste kunna ta emot CAMT.053-utdrag inbyggt. SWIFT kommer att sluta konvertera MT till ISO-format.
- November 2028: Full pensionering av MT940, MT942, MT950, MT900 och MT910. Dessa kommer att ersättas av CAMT.052, CAMT.053 och CAMT.054 motsvarigheter.
Kontoutdragsparser stöder både det äldre MT940-formatet och de moderna CAMT.053/PAIN.001-formaten, vilket gör det idealiskt för övergångsperioden.