Jualan v1.5.0-081: Perbaikan Deteksi Duplikasi Nota OCR Berdasarkan Tanggal Transaksi & UI Non-Blocking
Perbaikan false positive deteksi duplikasi nota OCR camera dengan validasi tanggal transaksi, pembatasan jendela temporal, serta tombol non-blocking 'Bukan Duplikat' di UI.
1mnt baca
Pembaruan ini memperbaiki masalah false positive pada sistem deteksi duplikasi nota OCR (find_semantic_basket_duplicate) ketika pengguna mengunggah foto nota melalui kamera smartphone (nota_camera_*.jpg).
- Tanggal Transaksi Tidak Terverifikasi: Sebelumnya, algoritma pencocokan semantik keranjang belanja hanya mencocokkan kemiripan total nominal (
total_amount) dan item keranjang (basket_sim >= 0.40) terhadap 20 transaksi pembelian terakhir di database tanpa memfilter tanggal nota. Akibatnya, nota belanja rutin dengan item & nominal serupa pada hari berbeda terdeteksi sebagai duplikat 100%. - Field Warning Terpotong: Field
duplicate_warningbelum terdaftar pada schema responseOCRTaskResponse, sehingga frontend menampilkan fallback teks generik. - Modal UI Bersifat Hard-Blocking: Modal peringatan duplikat hanya menyediakan tombol “Batal” yang melakukan reset form total tanpa memberi pilihan kepada pengguna untuk melanjutkan jika nota tersebut sah.
- Validasi & Normalisasi Tanggal Transaksi (
sajen/app/services/ocr_normalizer.py):- Menambahkan helper
_parse_date_safeyang tangguh mengenali berbagai format tanggal Indonesia (YYYY-MM-DD,DD/MM/YYYY,DD-MM-YY, dsb). - Jika tanggal nota kandidat valid (
cand_date_obj), query ke database kini memfilter secara presisi padaTransaction.transaction_date == cand_date_obj. Transaksi dengan tanggal berbeda diabaikan dan tidak dianggap duplikat. - Jika tanggal nota tidak terbaca, pencarian dibatasi pada jendela sempit 3 hari terakhir dengan ambang batas kesamaan keranjang yang diperketat (
basket_sim >= 0.70).
- Menambahkan helper
- Pydantic Schema Serialization (
sajen/app/schemas/ocr.py&api/v1/ocr.py):- Menambahkan field
duplicate_warning: Optional[str] = NonekeOCRTaskResponseagar detail tanggal dan referensi transaksi duplikat tersampaikan utuh ke frontend.
- Menambahkan field
- Frontend UI Non-Blocking (
blonjo/src/pages/transaction/components/DuplicateWarningDialog.tsx&Transactions.tsx):- Menambahkan tombol aksi hijau “Bukan Duplikat, Lanjutkan” (
onProceed). - Saat diklik, status duplikasi dinonaktifkan (
smartNote.updateParsed({ is_duplicate: false })) sehingga data hasil bacaan nota tetap dapat ditinjau dan disimpan ke jurnal akuntansi.
- Menambahkan tombol aksi hijau “Bukan Duplikat, Lanjutkan” (
- Fallback Hook (
blonjo/src/pages/transaction/hooks/useOcrUpload.ts):- Memperbaiki pembacaan deskripsi warning dari
task.extracted_data.duplicate_warningsebelum fallback ke pesan default.
- Memperbaiki pembacaan deskripsi warning dari