Paguyuban Perumahan JRK 1 β baca bukti transfer otomatis & catat IPL
Warga atau pengurus cukup mengirim foto bukti transfer ke grup OCR. Bot mendeteksi gambar, membacanya dengan OCR lokal, lalu mencocokkan unit, bulan, dan nominal secara otomatis.
| Komponen | Keterangan |
|---|---|
| RapidOCR (lokal) | Mesin utama membaca teks pada bukti transfer. Berjalan di server, tanpa kirim gambar ke luar. |
| Fallback LLM-vision | Dipakai bila hasil OCR minim/tidak jelas. Dibatasi kuota cloud OCR_CLOUD_DAILY_CAP=100 per hari. |
apply_learned_corrections | Koreksi hasil belajar β perbaiki pola OCR yang sering salah baca. |
120363410360851430@g.us. Grup Pengurus: 120363316047070840@g.us.Alur tiga langkah: warga mengirim foto bukti transfer, bot menampilkan tombol konfirmasi, lalu bot menampilkan bukti yang tercatat.
IPL Blok X No. 17, IPL X-17, IPL X/17, IPL X_17.Bulan Huni (format YYYY-MM) di sheet Unit, lalu bot melewati bulan yang sudah tercatat di sheet Pembayaran untuk unit yang sama (tunggakan.first_unpaid_month).Bulan Huni berada di masa depan, bot mengklaim bulan berjalan (tidak mengklaim bulan yang belum berjalan).nominal // tarif (minimal 1). Jadi nominal berlebih otomatis menutup beberapa bulan sekaligus.September 2026, SeptemberβOktober 2026, atau lintas tahun Desember 2026βFebruari 2027.bulanSelected (format YYYY-MM), bulan, dan tahun.| Data | Keterangan |
|---|---|
| Bank / rekening | Bank pengirim & tujuan transfer. |
| Nominal | Diambil lewat fungsi extract_nominal. |
| Tanggal | Tanggal transaksi pada bukti. |
| Nama pengirim | Dipakai untuk mencocokkan penyewa dengan unit. |
| Teks pesan | Catatan/caption bila ada, untuk memperkuat pencocokan. |
Semua hasil bacaan dapat diperbaiki oleh apply_learned_corrections sebelum dipakai.
Nama penyewa dipetakan ke unit/blok melalui unit_lookup, memakai cache data/kwitansi-unit-cache.json yang di-refresh setiap 01:00 WIB.
Bulan Huni format YYYY-MM di sheet Unit; bulan yang sudah tercatat di sheet Pembayaran dilewati). Jumlah bulan = nominal // tarif (minimal 1), lalu diberi label rentang seperti September 2026 atau SeptemberβOktober 2026.Bot mengenali unit dari prefix blok. Total ada 14 blok dengan tarif dan catatan berbeda.
| Blok | Pola Unit | Tarif/bulan | Catatan |
|---|---|---|---|
| I | JRK 1 Blok I No. X | Rp150.000 | β |
| II | JRK 1 Blok II No. X | Rp150.000 | β |
| III | JRK 1 Blok III No. X | Rp150.000 | β |
| IV | JRK 1 Blok IV No. X | Rp150.000 | β |
| V | JRK 1 Blok V No. X | Rp150.000 | β |
| VI | JRK 1 Blok VI No. X | Rp150.000 | β |
| VII | JRK 1 Blok VII No. X | Rp150.000 | β |
| VIII | JRK 1 Blok VIII No. X | Rp150.000 | β |
| IX | JRK 1 Blok IX No. X | Rp150.000 | β |
| X Depan | JRK 1 Blok X No. X | Rp150.000 | β |
| X Belakang | JRK 1 Blok X No. X | Rp150.000 | β |
| Raya Depan | JRK 1 Raya ... | Rp150.000 | β |
| Raya Belakang | JRK 1 Raya ... | Rp150.000 | β |
| RUHA | JRK 1 RUHA No. X | Rp200.000 | β |
Bila nama unit tidak terdeteksi, bot masuk ke stage unit untuk menanyakan blok/nomor unit kepada warga.
| Jenis | Endpoint / Kolom |
|---|---|
| IPL | save.php β kolom: unit, nama, nominalPerBulan, bulanSelected, bulan, tahun, korlap, keterangan = "Auto OCR. Transfer: {tanggal}", tanggalTransfer, buktiTransfer. |
| Non-IPL (pengeluaran / PJM / token PLN) |
save-income-expense.php |
Bot hanya menyimpan otomatis bila dua syarat terpenuhi:
FINANCE_SAVE_ALLOWED).Bila salah satu tidak terpenuhi, bot tidak auto-save dan meminta konfirmasi finance (atau menunggu tombol konfirmasi).
Saat bot butuh konfirmasi, ia menjalankan tahapan (stage) berikut:
| Parameter | Nilai |
|---|---|
| TTL state | 900 detik (15 menit) |
| Reminder | 180 detik (3 menit) |
| Prompt kategori | Bot menampilkan pilihan jenis transaksi (IPL / Pengeluaran / Pemasukan) |
| Fallback unit | Bot menanyakan nomor unit bila tidak terdeteksi |
| Situasi | Penanganan Bot |
|---|---|
| Gambar tak terbaca | Fallback ke LLM-vision β bila tetap gagal, bot mengirim pesan agar bukti dikirim ulang. |
| Nominal tak terbaca | Bot mengirim pesan agar bukti dikirim ulang. |
| Nominal tidak match (tidak pas) | Tidak auto-save β bot meminta konfirmasi finance. |
| Nominal > 50 juta | Ditolak oleh validate_nominal. |
| Unit tak ketemu | Masuk stage unit, bot menanyakan blok/nomor unit. |
| Multi-unit | Bot tampilkan preview warning sebelum dicatat. |
| Rekening bukan HARKESPAN / PAGUYUBAN / JRK / YAYASAN / PENGURUS | Masuk stage tujuan (bot meminta konfirmasi tujuan). |
| Nomor non-finance | Bot balas: "Nomor ini belum terdaftar finance, bukti tidak disimpan." |
| Gambar rusak | Bot balas: "β οΈ Media tidak valid/rusak". |
| Pause per grup | Bot dapat dijeda per grup; statusnya tersimpan di data/bot-state.json. |
Setelah edit file .py | Perlu restart layanan wuzapi-python.service agar perubahan aktif. |
Caption sebaiknya menyebut blok dan nomor unit, misalnya IPL Blok X No. 17, IPL X-17, IPL X/17, atau IPL X_17.
Auto-save hanya untuk verdict high + nomor whitelist finance. Selain itu bot minta konfirmasi lebih dulu.
Hanya di grup OCR yang terdaftar (whitelist). Contoh: 120363410360851430@g.us; grup Pengurus: 120363316047070840@g.us.
Bot tidak menyimpan otomatis dan meminta konfirmasi finance.
Blok IβX & Raya = Rp150.000/bulan; RUHA = Rp200.000/bulan.
Bot dapat dijeda per grup. Status jeda disimpan di data/bot-state.json.
Bot mengalokasikan ke bulan pertama yang belum dibayar, bukan bulan tanggal transfer. Dasarnya kolom Bulan Huni (format YYYY-MM) di sheet Unit, dengan melewati bulan yang sudah tercatat di sheet Pembayaran. Jumlah bulan = nominal // tarif (minimal 1), jadi nominal berlebih menutup beberapa bulan. Contoh: Rp150.000 β September 2026; Rp300.000 β SeptemberβOktober 2026.
Bot menyimpan modul di memori. Setiap edit file .py wajib systemctl restart wuzapi-python.service.