Supported banks
Native parsers (deterministic, sub-second)
| Bank | Code | Tested formats |
|---|---|---|
| BCA | BCA | Personal account · Tahapan · KlikBCA · m-BCA mobile PDF |
| Mandiri | MANDIRI | Personal · Livin' by Mandiri · Mandiri Corporate |
| BRI | BRI | BRImo · BRI internet banking · branch-printed |
| BNI | BNI | Personal · BNI Mobile · BNI internet banking |
| Permata | PERMATA | Personal · PermataMobile X · Permata Corporate |
| Danamon | DANAMON | D-Bank PRO · Danamon internet banking |
| BTN | BTN | Personal · BTN Mobile |
| OCBC | OCBC | OCBC ONE Mobile · OCBC internet banking |
For these banks, parsing is rule-based: high accuracy (~99.5%), sub-second, zero inference cost. No AI fallback unless the format is materially different from anything we've seen.
Detection-only + AI fallback (Quantum AI)
For these banks, we have header-detection rules (so detectedBank is set correctly) but no rule-based extractor yet — parsing routes to the AI fallback. End-to-end the call still succeeds; the difference is parse cost and per-bank tuning.
- CIMB Niaga (
CIMB_NIAGA) — detection-only; AI parser handles extraction; ~96% first-pass accuracy - Maybank Indonesia (
MAYBANK_ID) — detection-only; AI parser handles extraction; ~95% first-pass accuracy
For these, no detection rule yet — AI parser handles both detection and extraction:
- Bank Mega, Bank Bukopin, Bank Sinarmas
- HSBC Indonesia, Standard Chartered Indonesia
- DBS Indonesia, UOB Indonesia
- Bank syariah (BSI, Muamalat, Mega Syariah)
- BPDs (regional development banks) and BPRs (rural banks)
AI parsing is slower (3–8s) and slightly less accurate than native, but handles arbitrary layouts. When detectedBank comes back as UNKNOWN, you're in pure AI mode — accuracy is still ≥ 92% in our QA but you may want to flag for analyst review on low-confidence rows.
How bank detection works
When you don't pass bank_hint:
- Header recognition — searches the first page for known bank logos, masthead text, and account-number formats.
- Format fingerprint — column structure, font set, page geometry. Each native parser has a fingerprint signature.
- Confidence threshold — if the highest-confidence match is below 0.85, we fall through to the AI parser.
Detection accuracy is ~99.7% across the eight native banks. The remaining 0.3% are usually heavily redacted statements where the bank name is masked.
Hint vs auto-detect
| Use case | Recommendation |
|---|---|
| You know the bank upstream (customer told you) | Always pass bank_hint — slightly faster, removes ambiguity |
| Document Intelligence-style upload UX | Skip bank_hint; trust auto-detect |
| Multi-source aggregation (consumer told you it's "any of these 5 banks") | Pass bank_hint=AUTO (default) and inspect detectedBank after parsing |
Requesting a new native parser
Native parsers are built when transaction volume justifies them. The bar is roughly:
- 500+ statements/month from a single bank, or
- 5+ customer requests for the same bank
To request:
- Email sales@quantumelixir.tech with the bank name and expected monthly volume.
- We ask for 30+ sample statements (sanitized), covering a range of account types (personal, premier, corporate) and date ranges.
- Dev + validation is typically 2–3 weeks.
- New native parser deploys behind a feature flag; you opt in after validation against your volume.
AI parser is fine for most use cases
Don't over-rotate on native parsers. The AI parser is good enough for ~95% of use cases. Native parsers matter when you're doing real-time inline parsing where 3-8 seconds matters, or when your accuracy bar is regulator-grade (>99.5%).
Sandbox
Sandbox accepts all eight native parsers + AI fallback. Test PDFs are available at:
https://sandbox.quantumelixir.tech/bank-statement/fixtures/{bank}-sample.pdfWhere {bank} is the lowercase code: bca, mandiri, bri, etc. Each fixture includes a few months of synthetic transactions for end-to-end testing.