Jualan v1.5.0-059: Smart Duplicate Detection, Multi-Type Transaction Integrity & Active Journal Status Verification
Resolusi deteksi duplikasi naif antara Penjualan vs Pembelian, implementasi verifikasi status jurnal aktif (POSTED), dan sinkronisasi database pool MCP Server.
Pada sistem akuntansi dan smart note sebelumnya, deteksi duplikasi transaksi (is_duplicate) bekerja secara naif dengan hanya memeriksa kecocokan tenant_id, transaction_date, dan total_amount tanpa memfilter transaction_type.
Hal ini menimbulkan kekeliruan fatal (False Duplicate Collision):
- Pengguna menginput Penjualan Kasir (
SALES) sebesar Rp 325.500 pada tanggal 28 Agustus 2026. - Sistem mendeteksi adanya transaksi Pembelian (
PURCHASE) dari supplierBERKAH TIGAN FARMpada tanggal yang sama dengan nominal identik Rp 325.500 (Ref#408). - Sistem memblokir dan mengeluarkan peringatan duplikasi palsu:
“⚠️ DUPLIKASI AI TERDETEKSI: Transaksi dari ‘Supplier’ (Tanggal: 2026-08-28, Total: Rp 325,500) SUDAH PERNAH DICATAT sebelumnya (Ref #408).”
Selain itu, pada pemindaian OCR nota fisik, jika transaksi jurnal di buku besar sudah dihapus oleh pemilik toko, sistem lama terkadang masih mengunci struk sebagai duplikat karena tidak memverifikasi apakah status transaksi di database masih aktif (POSTED) atau sudah DELETED/VOID.
- Penjualan Ritel Kasir (
SALES): Toko ritel secara wajar menerima transaksi penjualan dengan nominal yang sama beberapa kali dalam satu hari. Pengecekan duplikasi padaSALESdinonaktifkan dari pencocokan nominal buta, dan hanya aktif jika nomor referensi struk (reference_no) yang sama persis diinput ulang. - Pembelian & Beban (
PURCHASE/EXPENSE): Wajib memeriksa kesesuaianTransaction.transaction_type == target_tx_type,Transaction.status == TransactionStatus.POSTED, serta memverifikasi nama supplier (contact_name) atau nomor nota fisik (reference_no).
- Saat pemindaian nota OCR dilakukan, sistem mengecek apakah transaksi riil dengan
TransactionType.PURCHASEdan statusPOSTEDmasih ada di database. - Jika jurnal transaksi sudah dihapus: Sistem menetapkan
is_duplicate: False, memungkinkan pemilik toko memindai ulang atau mengoreksi struk tanpa hambatan.
- Memperbaiki konfigurasi
DATABASE_URLpadamcp-backend-prodagar terhubung langsung keblonjo_db(bukanmcp_hub_db), sehingga seluruh riwayat transaksi riil, tabel kontak supplier, dan pengaturan toko dapat diakses 100%. - Menambahkan casting eksplisit
status::text ILIKE 'posted'danaccount_type::text ILIKE 'asset'untuk kompatibilitas PostgreSQL Enum.
# Test 1: Input Pendapatan Kasir Rp 325.500 pada 28/08/2026=== HASIL TEST 1 (SALES 325.500) ===is_duplicate: Noneduplicate_warning: None --> ✅ SUKSES (Bukan Duplikat)
# Test 2: Input Pembelian dari Berkah Tigan Farm Rp 325.500 pada 28/08/2026 (Ref #408 Aktif)=== HASIL TEST 2 (PURCHASE BERKAH TIGAN FARM 325.500) ===is_duplicate: Trueduplicate_warning: ⚠️ DUPLIKASI PEMBELIAN TERDETEKSI: Pembelian dari 'Supplier Terkait' (Tanggal: 2026-08-28, Total: Rp 325,500) SUDAH PERNAH DICATAT pada Nota #PUR-2026-0232. --> ✅ SUKSESDeteksi duplikasi kini bekerja secara cerdas dan kontekstual:
- Tidak ada lagi false duplicate antara transaksi penjualan dan pembelian.
- Penjualan ritel harian tidak lagi diblokir sembarangan.
- Transaksi yang jurnalnya sudah dihapus dapat dicatat/dipindai ulang secara bebas tanpa peringatan usang.