Pertanyaan yang Sering Diajukan

Pertanyaan Umum Tentang Parser Laporan Bank

Privasi Data dan Kepatuhan

Apakah ada data yang keluar dari infrastruktur saya?

Tidak. Parser Laporan Bank beroperasi sebagai pustaka stateless. Semua pemrosesan -- penguraian, penyembunyian PII, ekstraksi arsip -- terjadi di memori runtime lokal Anda. Tidak ada panggilan API, tidak ada layanan cloud, tidak ada telemetri. Parser XML diperkeras dengan no_network=True, memblokir semua akses keluar di tingkat parser. Data keuangan Anda tidak pernah meninggalkan lingkungan Anda.

Bagaimana cara kerja penyembunyian PII?

Bidang sensitif disamarkan sebelum mencapai logika aplikasi Anda. Parser mengidentifikasi nama debitur, nama kreditur, IBAN, dan alamat pos, menggantinya dengan ***REDACTED*** dalam output konsol dan mode streaming.

  • Penyembunyian aktif secara default dalam output CLI dan mode streaming.
  • Ekspor file (CSV, JSON, Excel) mempertahankan data yang tidak disembunyikan untuk pemrosesan hilir.
  • Aktifkan data lengkap dengan --show-pii di CLI atau redact_pii=False di API.

Apakah proses ekstraksi deterministik?

Ya -- output byte-identik pada setiap eksekusi. Dengan file input yang sama, parser menghasilkan hasil yang sama setiap kali. Tidak ada keacakan, tidak ada inferensi model, tidak ada sampling heuristik. CI menegakkan determinisme dengan 467 tes pada 100% cakupan cabang, termasuk fuzzing berbasis properti melalui Hypothesis.

Standar kepatuhan apa yang diikuti proyek ini?

Proyek ini memelihara dokumentasi selaras ISO 13485 dengan keterlacakan penuh:

  • Daftar Risiko terkuantifikasi dengan penilaian keparahan/probabilitas dan penilaian risiko residual.
  • Rencana Verifikasi dan Validasi dengan 19 langkah gerbang di 5 fase.
  • Prosedur Kontrol Perubahan dengan penilaian dampak dan protokol rollback.
  • Daftar SOUP mencakup semua dependensi dengan tingkat risiko dan pelacakan EOL.
  • Matriks Keterlacakan memetakan input desain ke implementasi dan verifikasi.

Setiap rilis menyertakan SBOM CycloneDX, checksum SHA-256, dan atestasi asal build GitHub.

Performa dan Skalabilitas

Seberapa cepat Parser Laporan Bank?

Ambang batas performa divalidasi di CI pada setiap commit:

Metrik Nilai
Throughput CAMT.053 27.000+ transaksi/detik
Throughput PAIN.001 52.000+ transaksi/detik
Latensi per-transaksi (CAMT) 37 mikrodetik
Latensi per-transaksi (PAIN.001) 19 mikrodetik
Waktu ke hasil pertama < 2 md

Bagaimana file besar ditangani?

Streaming dengan memori terbatas -- diuji pada 50.000 transaksi per file. Gunakan parse_streaming() untuk memproses file XML secara inkremental. Setiap transaksi di-yield sebagai dictionary; elemen dibersihkan setelah diproses untuk mencegah pertumbuhan memori. Memori tidak berskala dengan ukuran file -- tes 50K-transaksi (25+ MB) menggunakan kurang dari 2x memori tes 10K-transaksi.

Untuk file melebihi 50 MB (misalnya batch PAIN.001 host-to-host dengan 100K+ pembayaran), parser melakukan streaming melalui file sementara dengan stripping namespace berbasis chunk -- dokumen lengkap tidak pernah dimuat ke memori.

Bagaimana arsip ZIP diproses dengan aman?

iter_secure_xml_entries() memvalidasi setiap anggota sebelum ekstraksi:

  • Batas ukuran entri (default 10 MB per entri)
  • Batas ukuran total tidak terkompresi (default 50 MB)
  • Batas rasio kompresi (default 100:1) untuk mencegah bom ZIP
  • Penolakan entri terenkripsi

Tidak ada file yang ditulis ke disk. Byte XML diteruskan langsung ke parser melalui from_bytes().

Bisakah saya menganalisis beberapa file secara paralel?

Ya. Gunakan parse_files_parallel() yang mendistribusikan pekerjaan di seluruh 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")

Format yang Didukung

Format laporan bank apa saja yang didukung?

Format Standar Tipe File Kelas Parser
CAMT.053 ISO 20022 Bank-to-Customer Statement .xml CamtParser
PAIN.001 ISO 20022 Credit Transfer Initiation .xml Pain001Parser
CSV Ekspor bank generik .csv CsvStatementParser
OFX Open Financial Exchange .ofx OfxParser
QFX Quicken Financial Exchange .qfx QfxParser
MT940 Standar SWIFT .mt940, .sta Mt940Parser

Apakah parser menangani dialek bank-spesifik dari CAMT.053?

Ya -- agnostik namespace secara desain. Parser menghapus namespace XML sebelum pemrosesan, menangani varian CAMT.053 apa pun (camt.053.001.02, camt.053.001.04, atau pembungkus bank proprietary) tanpa konfigurasi spesifik namespace. Kueri XPath menargetkan struktur elemen, bukan URI namespace.

Untuk bank yang membungkus CAMT dalam amplop kustom, gunakan from_string() atau from_bytes() untuk memasukkan dokumen dalam secara langsung.

Bisakah saya memetakan header kolom CSV kustom ke skema standar?

Ya -- normalisasi otomatis, tanpa konfigurasi. CsvStatementParser mengenali variasi header umum: "Date", "Transaction Date", "Booking Date" semuanya dipetakan ke bidang date. "Amount", "Value", "Sum" dipetakan ke amount. Kolom kredit/debit terpisah (misalnya "Credit" dan "Debit") dideteksi dan digabungkan menjadi satu jumlah bertanda secara otomatis.

Apa format outputnya?

Semua parser menghasilkan DataFrames pandas terstandarisasi dengan tipe kolom konsisten:

Format Kolom Utama
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 (dinormalisasi)

Anda juga dapat mengekspor ke CSV, JSON, Excel, atau mengkonversi ke DataFrames Polars.

Alur Kerja Perbendaharaan

Bagaimana parser menangani laporan multi-mata uang?

Setiap transaksi mempertahankan mata uang aslinya -- tanpa konversi implisit. Bidang Currency diekstrak dari atribut XML Ccy per transaksi. Laporan multi-mata uang tetap apa adanya. Metode get_account_balances() mengembalikan saldo pembukaan dan penutupan per akun dengan kode mata uang asli. Rekonsiliasi lintas mata uang diserahkan ke logika hilir Anda, di mana Anda mengendalikan sumber kurs.

Apakah parser mendukung format keluar dan masuk?

Ya. Pain001Parser menangani file inisiasi transfer kredit ISO 20022 PAIN.001 (pembayaran keluar). CamtParser menangani file laporan bank-ke-nasabah CAMT.053 (pelaporan masuk). Keduanya mendukung streaming, penyembunyian PII, dan ekspor ke CSV, JSON, dan Excel. Gunakan detect_statement_format() untuk mengidentifikasi format secara otomatis.

Apa yang terjadi ketika entri transaksi cacat?

Perilaku tergantung pada mode penguraian:

  • parse() (mode batch) -- Entri cacat yang kekurangan bidang wajib (Amount, Currency, atau CdtDbtInd) dilewati dengan log peringatan. Sisa laporan diuraikan secara normal.
  • parse_streaming() (mode streaming) -- Kesalahan penguraian langsung dipropagasi sebagai pengecualian. Tidak ada kehilangan data diam-diam. Perilaku fail-fast ini disengaja untuk alur kerja keuangan di mana setiap transaksi harus dipertanggungjawabkan.

Bagaimana cara kerja deduplikasi?

Kelas Deduplicator mendeteksi duplikat tepat dan kecocokan yang dicurigai dengan skor kepercayaan yang dapat dijelaskan:

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

Instalasi dan Kompatibilitas

Bagaimana cara menginstal Parser Laporan Bank?

pip install bankstatementparser

Untuk dukungan DataFrame Polars opsional:

pip install bankstatementparser[polars]

Versi Python apa yang didukung?

Python 3.9 hingga 3.14. Semua versi diuji di CI dengan 467 tes pada 100% cakupan cabang.

Apa saja dependensinya?

Pustaka ini memiliki 5 dependensi langsung:

  • lxml -- Penguraian XML dengan pengerasan keamanan
  • pandas -- DataFrames dan manipulasi data
  • openpyxl -- Ekspor Excel
  • pydantic -- Validasi data dan model
  • defusedxml -- Perlindungan XXE

Semua dependensi memiliki versi terkunci hash SHA-256. SBOM CycloneDX memetakan setiap komponen runtime.

Apakah berfungsi di macOS, Linux, dan Windows?

Ya. Pustaka ini berfungsi di macOS, Linux, dan Windows (melalui WSL). Tidak ada dependensi spesifik platform.

Reproduktibilitas dan Keamanan

Bagaimana cara memverifikasi reproduktibilitas?

python -m pytest                              # 467 tes, 100% cakupan cabang
python scripts/verify_locked_hashes.py        # Verifikasi hash SHA-256
git log --show-signature -1                   # Verifikasi tanda tangan commit

Perlindungan keamanan apa yang sudah ada?

  • Perlindungan XXE: resolve_entities=False, no_network=True, load_dtd=False
  • Perlindungan Bom ZIP: Batas rasio kompresi, batas ukuran entri, penolakan entri terenkripsi
  • Pencegahan Traversal Jalur: Daftar blokir pola berbahaya dan resolusi symlink
  • Validasi Input: Batas ukuran file (default 100 MB), validasi ekstensi/format
  • Rantai Pasok: Dependensi terkunci hash SHA-256, SBOM CycloneDX, atestasi asal build
  • Commit Bertanda Tangan: Ditegakkan di CI

Bagaimana perbandingan Parser Laporan Bank dengan pyiso20022?

pyiso20022 adalah toolkit ISO 20022 luas yang menghasilkan dataclass Python dari skema XML ISO. Ini mencakup berbagai tipe pesan ISO 20022 (PACS, PAIN, CAMT, ADMI) dengan validasi skema. Parser Laporan Bank dibangun khusus untuk penguraian laporan bank dengan dukungan streaming, penyembunyian PII, deduplikasi, dan API terpadu di enam format termasuk format non-ISO (CSV, OFX, QFX, MT940). Jika Anda perlu menganalisis laporan bank ke DataFrames dengan keamanan tingkat produksi, gunakan Parser Laporan Bank. Jika Anda perlu bekerja dengan katalog pesan ISO 20022 penuh, gunakan pyiso20022.

Apa tenggat waktu migrasi SWIFT ISO 20022?

SWIFT telah menerbitkan garis waktu migrasi bertahap:

  • November 2026: Alamat terstruktur dan hibrida menjadi wajib. Pesan multi-instruksi MT101 akan ditolak. Fase 1 Manajemen Kasus dimulai.
  • November 2027: Semua lembaga keuangan harus dapat menerima laporan CAMT.053 secara native. SWIFT akan berhenti mengkonversi format MT ke ISO.
  • November 2028: Penghentian penuh MT940, MT942, MT950, MT900, dan MT910. Ini akan digantikan oleh padanan CAMT.052, CAMT.053, dan CAMT.054.

Parser Laporan Bank mendukung baik format lama MT940 maupun format modern CAMT.053/PAIN.001, menjadikannya ideal untuk periode transisi.