Lanjut ke konten
Samkarsa Logbook

Jualan v1.5.0-075: Precision Distributor OCR Discount Extraction, Boundary-Safe DP Detection & Self-Healing Math Reconciler

Perbaikan presisi ekstraksi diskon faktur distributor (Discount Product & Customer), pencegahan false-positive DP pada produk EDP, serta rekonsiliasi matematis dot-matrix.

1mnt baca

Pada versi v1.5.0-075, ekosistem Jualan (Sajen API & Blonjo UI) bersama MCP Server diperbarui untuk mengatasi anomali pembacaan faktur distributor multi-halaman dan kesalahan klasifikasi metode pembayaran:

  1. Boundary-Safe Payment Method & Purchase Context Protection (accounting.py & smart_parser.py):

    • Memperbaiki pencegat metode pembayaran pada sajen/app/api/v1/accounting.py yang sebelumnya menggunakan pencocokan substring kw in low_text untuk "dp ". Pola lama menyebabkan nama varian produk seperti SOKLIN POWDET DET EDP salah terdeteksi sebagai sinyal Down Payment (DP).
    • Menerapkan regex word boundary \b(dp|down\s*payment|uang\s*muka|panjar)\b dan membatasi customer_deposit HANYA untuk transaksi penjualan (sales), bukan pembelian dari supplier (purchase).
    • Memastikan tag eksplisit seperti (Metode Pembayaran: cash) dari hasil OCR diprioritaskan.
  2. Dukungan Multi-Kolom Diskon Distributor (ocrTool.ts, ocr.py, useOcrUpload.ts):

    • Mengakomodasi format faktur distributor (seperti PT. Bahagia Sumber Abadi / Wings) yang memiliki dua kolom diskon terpisah: Discount Product dan Discount Customer.
    • Menjumlahkan kedua kolom tersebut secara otomatis menjadi discount_amount pada baris item.
    • Memperbarui _map_rich_schema_to_frontend() dan endpoint polling get_ocr_task_detail() di sajen/app/api/v1/ocr.py agar selalu memetakan task.extracted_data secara konsisten sebelum dikirim ke UI.
  3. Self-Healing Mathematical Reconciler (ocr_normalizer.py & useOcrUpload.ts):

    • Mengaktifkan rekonsiliasi diskon otomatis: jika (qty * unit_price) > subtotal namun kolom diskon terlewat oleh OCR vision, selisihnya otomatis dipulihkan sebagai diskon baris item (discount = (qty * unit_price) - subtotal).
    • Merekonsiliasi selisih angka total akibat kesalahan baca titik printer dot-matrix (misal angka 3 terbaca 8 seperti 204158 vs 204153) berdasarkan penjumlahan subtotal item yang valid.
  4. Integritas Jurnal Otomatis (accounting.py & useSmartConfirm.ts):

    • Menghilangkan anomali jurnal yang tidak lengkap karena transaksi pembelian kini selalu dipetakan secara benar ke akun Persediaan/Pembelian vs Kas/Bank/Hutang, kebal terhadap kata kunci DP di nama barang.