Lanjut ke konten
Samkarsa Logbook

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:

  1. 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.
  2. Deduplikasi berbasis NRR/RRN: Menjamin tidak ada transaksi yang tercatat ganda.
  3. Rekonsiliasi Bank Otomatis: Menyinkronkan saldo 1-1102 (Bank Mandiri) pada Bento Card Dashboard blonjo.

┌──────────────────────────────────────────────────┐
│ 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.py di sajen/app/services/.
  • Implement IMAP/Gmail API listener di sajen-worker.
  • Tambahkan verifikasi NRR unik pada database sajen-api untuk mencegah entri ganda.
  • Jalankan unit test parsing & verifikasi pembaruan saldo Bank Mandiri 1-1102 di Dashboard Bento blonjo.