v1.0.0-044 — Cetak Biru & Draft Arsitektur Integrasi Mandiri QRIS Attachment Parser
Rancangan arsitektur, diagram data flow, dan spesifikasi teknis penarikan data transaksi QRIS Bank Mandiri via email attachment settlement akumulasi.
1mnt baca
Status:
DRAFT / READY FOR IMPLEMENTATION
Target Komponen:sajen-api,sajen-worker,blonjo-ui
Notifikasi pembayaran QRIS Bank Mandiri yang dikirimkan ke iswanputera@gmail.com dikirimkan secara akumulasi settlement dengan rincian transaksi tersimpan di dalam berkas lampiran (attachment) (.csv / .xlsx / .pdf).
Metode Attachment Parsing ini memiliki beberapa keunggulan arsitektural dibanding notifikasi per transaksi:
- Presisi Finansial 100%: Berkas akumulasi mencantumkan Nominal Kotor (Gross), Biaya Admin MDR (0.3% - 0.7%), serta Nominal Bersih (Net) yang cair ke rekening
1-1102. - Deduplikasi berbasis NRR/RRN: Menjamin tidak ada transaksi yang tercatat ganda.
- Rekonsiliasi Bank Otomatis: Menyinkronkan saldo
1-1102(Bank Mandiri) pada Bento Card Dashboardblonjo.
┌──────────────────────────────────────────────────┐│ Email Notifikasi Bank Mandiri ││ (Ke: iswanputera@gmail.com) │└────────────────────────┬─────────────────────────┘ │ │ 1. Attachment Email (CSV / XLSX / PDF) ▼┌──────────────────────────────────────────────────┐│ sajen-worker (Email Listener & Sync) │└────────────────────────┬─────────────────────────┘ │ │ 2. Extract & Pass Attachment Content ▼┌──────────────────────────────────────────────────┐│ Attachment Parser Engine ││ (pandas / openpyxl / pdfplumber) │└────────────────────────┬─────────────────────────┘ │ │ 3. Row Extraction (Tanggal, NRR, Gross, MDR, Net) ▼┌──────────────────────────────────────────────────┐│ Deduplication Check (Check NRR vs Database) │└────────────────────────┬─────────────────────────┘ │ │ 4. Auto Reconciler & Journal Generator ▼┌──────────────────────────────────────────────────┐│ Journal Entry Posting (Status: POSTED) ││ • Debit : 1-1102 (Bank Mandiri) [Net] ││ • Debit : 6-14xx (Beban MDR QRIS) [MDR Fee] ││ • Kredit : 4-1101 (Pendapatan Sales) [Gross] │└────────────────────────┬─────────────────────────┘ │ │ 5. Real-time Balance Update ▼┌──────────────────────────────────────────────────┐│ PostgreSQL (SajenDB) & Bento Card blonjo │└──────────────────────────────────────────────────┘- Modul:
app/workers/mandiri_qris_sync.py - Tugas: Memeriksa inbox Gmail penerima, mengunduh lampiran, dan mengirimkan stream data ke engine parser.
- Modul:
app/services/mandiri_parser.py - Library:
pandas/openpyxl/pdfplumber - Output Data Structure:
{ "settlement_date": "2026-08-21", "total_records": 12, "total_gross": 1500000.0, "total_mdr": 4500.0, "total_net": 1495500.0, "transactions": [ { "nrr": "202608210001234", "transaction_time": "2026-08-21 14:22:10", "gross_amount": 100000.0, "mdr_fee": 300.0, "net_amount": 99700.0, "customer_name": "Pelanggan QRIS" } ]}- Debit:
1-1102(Bank Mandiri) = Nominal Net (99,700) - Debit:
6-1401(Beban Admin QRIS/Bank) = Biaya MDR (300) - Kredit:
4-1101(Pendapatan Penjualan) = Nominal Kotor (100,000)
- Obtain sample attachment file (CSV/XLSX/PDF) dari Mandiri untuk verifikasi nama header kolom.
- Implement
mandiri_parser.pydisajen/app/services/. - Implement IMAP/Gmail API listener di
sajen-worker. - Tambahkan verifikasi NRR unik pada database
sajen-apiuntuk mencegah entri ganda. - Jalankan unit test parsing & verifikasi pembaruan saldo Bank Mandiri
1-1102di Dashboard Bentoblonjo.