Veelgestelde vragen

Veelgestelde vragen over Bankafschrift-parser

Gegevensprivacy en compliance

Verlaten er gegevens mijn infrastructuur?

Nee. Bankafschrift-parser werkt als een stateless bibliotheek. Alle verwerking -- parsing, PII-maskering, archiefextractie -- vindt plaats in uw lokale runtimegeheugen. Geen API-aanroepen, geen clouddiensten, geen telemetrie. XML-parsers zijn beveiligd met no_network=True, waardoor alle uitgaande toegang op parserniveau wordt geblokkeerd. Uw financiële gegevens verlaten nooit uw omgeving.

Hoe werkt PII-maskering?

Gevoelige velden worden gemaskeerd voordat ze uw applicatielogica bereiken. De parser herkent debiteurnamen, crediteurnamen, IBAN's en postadressen en vervangt ze door ***REDACTED*** in console-uitvoer en streamingmodus.

  • Maskering staat standaard aan in CLI-uitvoer en streamingmodus.
  • Bestandsexporten (CSV, JSON, Excel) behouden ongemaskeerde gegevens voor downstreamverwerking.
  • Opt-in voor volledige gegevens met --show-pii in de CLI of redact_pii=False in de API.

Is het extractieproces deterministisch?

Ja -- byte-identieke uitvoer bij elke uitvoering. Bij hetzelfde invoerbestand produceert de parser elke keer hetzelfde resultaat. Geen willekeurigheid, geen modelinferentie, geen heuristische steekproeven. CI dwingt determinisme af met 467 tests bij 100% branchdekking, inclusief property-based fuzzing via Hypothesis.

Welke compliancestandaarden volgt het project?

Het project houdt ISO 13485-conforme documentatie bij met volledige traceerbaarheid:

  • Een gekwantificeerd Risicoregister met ernst/waarschijnlijkheidsscore en beoordeling van resterend risico.
  • Een Verificatie- en validatieplan met 19 gecontroleerde stappen over 5 fasen.
  • Een Wijzigingsbeheerprocedure met impactbeoordeling en terugdraaiprotocollen.
  • Een SOUP-register dat alle afhankelijkheden dekt met risiconiveaus en EOL-tracking.
  • Een Traceerbaarheidsmatrix die ontwerpinvoer koppelt aan implementatie en verificatie.

Elke release bevat een CycloneDX SBOM, SHA-256-checksums en GitHub-buildherkomstattestatie.

Prestaties en schaalbaarheid

Hoe snel is Bankafschrift-parser?

Prestatiedrempels worden bij elke commit gevalideerd in CI:

Meting Waarde
CAMT.053-doorvoer 27.000+ transacties/seconde
PAIN.001-doorvoer 52.000+ transacties/seconde
Latentie per transactie (CAMT) 37 microseconden
Latentie per transactie (PAIN.001) 19 microseconden
Tijd tot eerste resultaat < 2 ms

Hoe worden grote bestanden verwerkt?

Streaming met beperkt geheugen -- getest met 50.000 transacties per bestand. Gebruik parse_streaming() om XML-bestanden incrementeel te verwerken. Elke transactie wordt als dictionary opgeleverd; elementen worden na verwerking gewist om geheugengroei te voorkomen. Geheugen schaalt niet mee met bestandsgrootte -- de test met 50K transacties (25+ MB) gebruikt minder dan 2x het geheugen van de test met 10K transacties.

Voor bestanden groter dan 50 MB (bijv. host-to-host PAIN.001-batches met 100K+ betalingen) streamt de parser via een tijdelijk bestand met chunk-gebaseerde namespace-verwijdering -- het volledige document wordt nooit in het geheugen geladen.

Hoe worden ZIP-archieven veilig verwerkt?

iter_secure_xml_entries() valideert elk lid vóór extractie:

  • Bestandsgroottelimiet (standaard 10 MB per item)
  • Totale ongecomprimeerde groottelimiet (standaard 50 MB)
  • Compressieratiolimiet (standaard 100:1) om ZIP-bommen te voorkomen
  • Afwijzing van versleutelde bestanden

Er wordt geen bestand naar schijf geschreven. XML-bytes gaan rechtstreeks naar de parser via from_bytes().

Kan ik meerdere bestanden parallel parsen?

Ja. Gebruik parse_files_parallel() dat werk verdeelt over een 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")

Ondersteunde formaten

Welke bankafschriftformaten worden ondersteund?

Formaat Standaard Bestandstypen Parserklasse
CAMT.053 ISO 20022 Bank-naar-klant-afschrift .xml CamtParser
PAIN.001 ISO 20022 Overboekingsopdracht .xml Pain001Parser
CSV Generieke bankexporten .csv CsvStatementParser
OFX Open Financial Exchange .ofx OfxParser
QFX Quicken Financial Exchange .qfx QfxParser
MT940 SWIFT-standaard .mt940, .sta Mt940Parser

Verwerkt de parser bankspecifieke dialecten van CAMT.053?

Ja -- namespace-onafhankelijk ontworpen. De parser verwijdert XML-namespaces vóór verwerking en verwerkt elke CAMT.053-variant (camt.053.001.02, camt.053.001.04 of eigen bankwrappers) zonder namespacespecifieke configuratie. XPath-query's richten zich op de elementstructuur, niet op namespace-URI's.

Voor banken die CAMT in een aangepaste envelop verpakken, gebruik from_string() of from_bytes() om het binnenste document rechtstreeks in te voeren.

Kan ik aangepaste CSV-kolomkoppen naar het standaardschema koppelen?

Ja -- automatische normalisatie, geen configuratie nodig. CsvStatementParser herkent veelvoorkomende kopvariaties: "Date", "Transaction Date", "Booking Date" worden allemaal gekoppeld aan het date-veld. "Amount", "Value", "Sum" worden gekoppeld aan amount. Gesplitste credit/debet-kolommen (bijv. "Credit" en "Debit") worden gedetecteerd en automatisch gecombineerd tot één getekend bedrag.

Wat is het uitvoerformaat?

Alle parsers produceren gestandaardiseerde pandas DataFrames met consistente kolomtypen:

Formaat Belangrijkste kolommen
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 (genormaliseerd)

U kunt ook exporteren naar CSV, JSON, Excel of converteren naar Polars DataFrames.

Treasury-workflows

Hoe verwerkt de parser afschriften in meerdere valuta's?

Elke transactie behoudt zijn oorspronkelijke valuta -- geen impliciete conversie. Het Currency-veld wordt geëxtraheerd uit het XML Ccy-attribuut per transactie. Afschriften in meerdere valuta's blijven ongewijzigd. De get_account_balances()-methode retourneert openings- en sluitingssaldi per rekening met de oorspronkelijke valutacodes. Cross-currency reconciliatie wordt overgelaten aan uw downstreamlogica, waar u de wisselkoersbron bepaalt.

Ondersteunt de parser zowel uitgaande als inkomende formaten?

Ja. Pain001Parser verwerkt ISO 20022 PAIN.001-overboekingsopdrachten (uitgaande betalingen). CamtParser verwerkt CAMT.053 bank-naar-klant-afschriften (inkomende rapportage). Beide ondersteunen streaming, PII-maskering en export naar CSV, JSON en Excel. Gebruik detect_statement_format() om het formaat automatisch te identificeren.

Wat gebeurt er wanneer een transactie-invoer ongeldig is?

Het gedrag hangt af van de parsemodus:

  • parse() (batchmodus) -- Ongeldige invoer zonder vereiste velden (Amount, Currency of CdtDbtInd) worden overgeslagen met een waarschuwingslog. De rest van het afschrift wordt normaal geparseerd.
  • parse_streaming() (streamingmodus) -- Parsefouten worden onmiddellijk als uitzonderingen doorgegeven. Geen stilzwijgend gegevensverlies. Dit fail-fast gedrag is opzettelijk voor financiële workflows waar elke transactie verantwoord moet worden.

Hoe werkt deduplicatie?

De Deduplicator-klasse detecteert exacte duplicaten en vermoedelijke overeenkomsten met verklaarbare betrouwbaarheidsscores:

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

Installatie en compatibiliteit

Hoe installeer ik Bankafschrift-parser?

pip install bankstatementparser

Voor optionele Polars DataFrame-ondersteuning:

pip install bankstatementparser[polars]

Welke Python-versies worden ondersteund?

Python 3.9 tot en met 3.14. Alle versies worden getest in CI met 467 tests bij 100% branchdekking.

Wat zijn de afhankelijkheden?

De bibliotheek heeft 5 directe afhankelijkheden:

  • lxml -- XML-parsing met beveiligingshardening
  • pandas -- DataFrames en gegevensmanipulatie
  • openpyxl -- Excel-export
  • pydantic -- Gegevensvalidatie en modellen
  • defusedxml -- XXE-bescherming

Alle afhankelijkheden hebben SHA-256 hash-vergrendelde versies. De CycloneDX SBOM brengt elk runtimecomponent in kaart.

Werkt het op macOS, Linux en Windows?

Ja. De bibliotheek werkt op macOS, Linux en Windows (via WSL). Er zijn geen platformspecifieke afhankelijkheden.

Reproduceerbaarheid en beveiliging

Hoe kan ik reproduceerbaarheid verifiëren?

python -m pytest                              # 467 tests, 100% branchdekking
python scripts/verify_locked_hashes.py        # SHA-256 hashverificatie
git log --show-signature -1                   # Commithandtekening verifiëren

Welke beveiligingsmaatregelen zijn ingebouwd?

  • XXE-bescherming: resolve_entities=False, no_network=True, load_dtd=False
  • ZIP-bombeveiliging: Compressieratiolimieten, bestandsgroottelimieten, afwijzing van versleutelde bestanden
  • Padtraversatiebescherming: Blokkeerlijst voor gevaarlijke patronen en symlinkreslutie
  • Invoervalidatie: Bestandsgroottelimieten (standaard 100 MB), extensie-/formaatvalidatie
  • Toeleveringsketen: SHA-256 hash-vergrendelde afhankelijkheden, CycloneDX SBOM, buildherkomstattestatie
  • Getekende commits: Afgedwongen in CI

Hoe verhoudt Bankafschrift-parser zich tot pyiso20022?

pyiso20022 is een breed ISO 20022-toolkit dat Python-dataklassen genereert uit ISO XML-schema's. Het dekt een breed scala aan ISO 20022-berichttypen (PACS, PAIN, CAMT, ADMI) met schemavalidatie. Bankafschrift-parser is speciaal gebouwd voor het parsen van bankafschriften met streamingondersteuning, PII-maskering, deduplicatie en een uniforme API over zes formaten, inclusief niet-ISO-formaten (CSV, OFX, QFX, MT940). Als u bankafschriften naar DataFrames moet parsen met productieklare beveiliging, gebruik Bankafschrift-parser. Als u met het volledige ISO 20022-berichtencatalogus moet werken, gebruik pyiso20022.

Wat zijn de SWIFT ISO 20022-migratiedeadlines?

SWIFT heeft een gefaseerd migratietijdschema gepubliceerd:

  • November 2026: Gestructureerde en hybride adressen worden verplicht. MT101 multi-instructieberichten worden geweigerd. Case Management Fase 1 begint.
  • November 2027: Alle financiële instellingen moeten CAMT.053-afschriften native kunnen ontvangen. SWIFT stopt met het converteren van MT-formaat naar ISO.
  • November 2028: Volledige uitfasering van MT940, MT942, MT950, MT900 en MT910. Deze worden vervangen door CAMT.052, CAMT.053 en CAMT.054 equivalenten.

Bankafschrift-parser ondersteunt zowel het oude MT940-formaat als de moderne CAMT.053/PAIN.001-formaten, waardoor het ideaal is voor de overgangsperiode.