Questions & Answers

Frequently Asked Questions

Comprehensive guidance covering specifications, zero-telemetry local execution, performance, and commercial licensing.

Showing 16 of 16 questions
Architecture How does Bank Statement Parser achieve sub-millisecond parsing throughput?

Bank Statement Parser is engineered entirely in high-assurance native Rust with zero-copy stream processing, SIMD-accelerated string scanners, and direct memory layout mapping. By avoiding intermediate object allocations and skipping heavy browser engines or JVM runtimes, the tokenizer parses complex PDF text streams and multi-megabyte CSV files in under 0.8 ms per statement on standard multi-core hardware.

Formats Which bank statement standards and specifications are natively supported?

The parser provides native, deterministic parsers for the primary banking standards worldwide:

  • PDF Statements: Digital PDF 1.4–2.0 native layout coordinate mapping and multi-column transaction extraction.
  • CSV & Delimited: RFC 4180 auto-detecting delimiters (comma, semicolon, tab), date ordering (DMY, MDY, YMD), and decimal notations.
  • OFX / QFX: Open Financial Exchange SGML (1.x) and XML (2.x) banking and credit card formats.
  • SWIFT MT940 / MT942: Tagged financial statement messages with field 61 sub-fields and balance reconciliation.
  • ISO 20022 CAMT.053: XML cash management customer statement messages conforming to SEPA rulebooks.
Architecture How are corrupted, malformed, or ambiguous statement entries handled?

The engine implements strict deterministic error boundaries. When an ambiguous date format or corrupted record is encountered, the parser isolates the specific record rather than failing the entire document batch. It attaches a structured diagnostic warning to the output while verifying opening and closing balance arithmetic to alert compliance operators if amounts fail reconciliation.

Formats Does Bank Statement Parser support scanned paper statements using OCR?

Yes. When compiled with the optional --features ocr flag, Bank Statement Parser leverages local, offline optical character recognition models. Scanned bitmap PDFs or image statements (TIFF, PNG) are converted to bounding-box coordinates and passed to the lexical tokenizer without transmitting any image data over the network.

Security Does Bank Statement Parser send financial documents or telemetry to remote servers?

Zero network egress, guaranteed. Bank Statement Parser is 100% self-contained and operates exclusively in local memory. It contains zero telemetry, zero analytics beacons, zero crash reporters, and zero background network calls. All document ingestion, tokenization, and schema validation execute strictly within your local process sandbox.

Privacy How can enterprise compliance teams verify zero-network egress in air-gapped environments?

Security teams can verify our zero-egress guarantee through multiple standard controls: running the binary inside a network-isolated Linux namespace (unshare -n), deploying within a Docker container configured with --network none, or inspecting socket activity via strace / lsof. In all scenarios, zero socket binds or DNS resolutions occur.

Security Are bank statements or parsed transaction records cached or written to disk?

No. Bank Statement Parser operates strictly in volatile memory. Statement byte buffers are allocated during stream processing and immediately scrubbed upon completion. No temporary files, swap caches, or intermediate scratch artifacts are written to persistent disk unless explicitly directed by the caller via the --output parameter.

Supply Chain How are release artifacts, dependencies, and SBOMs cryptographically verified?

Every release includes a machine-readable CycloneDX Software Bill of Materials (SBOM) and SHA256 checksums recorded in SHA256SUMS. All Git release tags and binaries are signed using SSH maintainer keys published in KEYS.asc. You can verify any asset using shasum -a 256 -c SHA256SUMS.

Rust How do I integrate Bank Statement Parser into an existing Rust application?

Add the dependency to your Cargo.toml:

[dependencies]
bankstatementparser = "0.0.2"

Then parse any statement file into strongly-typed structures:

use bankstatementparser::Parser;
use std::path::Path;
fn main() -> Result<(), Box<dyn std::error::Error>> {
 let parser = Parser::new();
 let statement = parser.parse_file(Path::new("statement.pdf"))?;
 println!("Account: {}, Balance: {}", statement.account_id, statement.closing_balance);
 Ok(())
}
Python Is there a native Python SDK, and does it require a local Rust toolchain?

Pre-compiled binary wheels (compiled with PyO3 and Maturin) are distributed on PyPI for Linux, macOS (Apple Silicon and Intel), and Windows. No Rust compiler is required on your servers. Install via pip:

pip install bankstatementparser

And use it in Python:

from bankstatementparser import parse_statement
statement = parse_statement("statement.pdf")
print(f"Transactions parsed: {len(statement.transactions)}")
Docker Can I execute Bank Statement Parser as a containerized microservice or Docker image?

Yes. Minimal, non-root container images are published on GitHub Container Registry. Mount your local statement directory to run extraction in an isolated container:

docker run --rm -v $(pwd):/data ghcr.io/sebastienrousseau/bankstatementparser:latest --input /data/statement.pdf --format json
Performance How does parallel multi-threading scale across large statement directories?

The CLI and SDK include a Rayon-based work-stealing parallel engine. Processing thousands of statement files scales linearly across available CPU threads without lock contention. Passing --threads 8 allows 10,000 statements to be ingested, normalized, and validated in under 8.2 seconds.

Licensing Can Bank Statement Parser be embedded in commercial enterprise software?

Yes. The project is dual-licensed under the Apache License 2.0 and the MIT License. You are permitted to select either license, enabling full commercial use, private modification, and closed-source redistribution without copyleft obligations.

ISO 20022 How does the validation engine verify ISO 20022 CAMT.053 schemas and balance proofs?

During extraction, every account IBAN is verified against ISO 7064 Mod-97 checksums, and bank identifiers are validated against ISO 9362 BIC structures. The engine enforces double-entry arithmetic proofs (Opening Balance + Credits - Debits == Closing Balance). If a balance mismatch is detected, a deterministic reconciliation discrepancy record is emitted.

Enterprise Is custom bank statement dialect or bespoke layout template mapping supported?

Yes. In addition to native parsers for major global banking institutions, Bank Statement Parser supports external YAML/JSON configuration files. Treasury teams can define custom table coordinates, regular expression transaction anchors, and date/currency mappings without modifying the underlying engine.

Support What enterprise support options, service level agreements (SLAs), and custom integrations are available?

We provide institutional support agreements including custom bank dialect model training, prioritized issue response SLAs, dedicated security audit consultations, and bespoke ERP/TMS integration adapters. Inquire via our Contact Page.

No matching questions found

Try searching for broader terms such as “Docker”, “ISO 20022”, “Python”, or “OCR”.

Have a question not listed here?

Our core engineering team and community stewards are available to assist. Explore the documentation guides, join our GitHub community discussions, or contact our solutions engineers directly.