Lanjut ke konten
Samkarsa Logbook

v1.0.0-014 : Perbaikan PDF Jurnal, OCR Tanggal, dan Rotasi API Key

Changelog untuk penyelesaian bug tata letak PDF laporan jurnal, kesalahan fallback tanggal pada OCR, implementasi rotasi multi-API Key, serta catatan penyelesaian algoritma diskon OCR.

Jualan,Sajen,MCP2mnt baca

Pada update ini, telah diselesaikan beberapa keluhan (bugs) yang dilaporkan terkait proses parsing nota dari SmartNote (OCR) dan perbaikan tata letak pada laporan PDF Jurnal Akuntansi.

Masalah: Preview PDF Jurnal (report_type = "journal_list") sebelumnya tampak berantakan:

  • Nominal 0 pada kolom Debit/Kredit dicetak sebagai 0,00 sehingga membuat tabel terlihat penuh dan sulit dibaca.
  • Teks keterangan (description) dan Account Name seringkali tertimpa atau meluap dari batas selnya.
  • Penulisan tahun pada tanggal kepanjangan sehingga mempersempit ruang tabel.

Solusi:

  • Mengubah logika pencetakan angka di PDF agar nominal 0 dicetak sebagai tanda hubung (-) pada kolom debit/kredit.
  • Menambahkan batas pemotongan (truncation) string untuk label akun (acc_label = acc_label[:15] + "..").
  • Memendekkan format tanggal pada kolom “Tanggal” dari %d/%m/%Y menjadi %d/%m/%y untuk menghemat ruang width sel tabel.
  • File yang diubah: sajen/app/services/reports.py

Masalah: Ketika nota OCR diproses dan nota tersebut HANYA menampilkan hari/bulan (tanpa tahun), atau ada tulisan “hari ini”, LLM Gemini sering berasumsi mundur satu tahun (misal ke 2025). Hal ini berbahaya untuk integritas data waktu transaksi.

Solusi:

  • Telah dilakukan modifikasi dan pengerasan instruksi (prompt engineering) pada tools ocr_receipt di sisi MCP Server.
  • Menambahkan ketegasan: JANGAN PERNAH mengarang/membuat tanggal sendiri jika tidak tertera di nota. ... Jika pada cetakan nota hanya menyebutkan "hari ini", "sekarang", atau hanya angka "Hari dan Bulan" (tanpa tahun), Anda WAJIB menggunakan "Tahun" dari info tanggal sistem di atas (yaitu tahun berjalan/saat ini, JANGAN menggunakan tahun sebelumnya).
  • File yang diubah: mcp-server/src/tools/ocrTool.ts

Masalah: Sistem OCR sering mengalami kendala ApiError: Request failed with status code 404 (atau 429 Too Many Requests) karena batas kuota gratis/rate limit API Gemini (Free Tier) yang sangat ketat (15 RPM).

Solusi:

  • Sistem sekarang dikonfigurasi untuk membaca hingga 3 kunci rahasia: GOOGLE_API_KEY, GOOGLE_API_KEY_FALLBACK, dan GOOGLE_API_KEY_FALLBACK_2.
  • ai_engine.py telah direfaktor ulang (rewritten) agar melakukan percobaan secara bergiliran (Round-Robin/Fallback Sequence) ke semua kunci yang tersedia secara otomatis jika terdeteksi error 429 atau 404.
  • File yang diubah: .env, .env.production, sajen/app/core/config.py, sajen/app/services/ai_engine.py

Penyelesaian Plan Sebelumnya:

  • Prompt OCR juga telah dievaluasi untuk mengidentifikasi jika kolom Harga Satuan kosong, namun Subtotal terisi. AI sekarang dipaksa untuk menghitung Harga Satuan secara terbalik (reverse calculation) dengan membagi Subtotal dengan Qty, atau setidaknya menyamakan Unit Price dengan Subtotal jika Qty tidak valid.
  • Memperjelas perbedaan penangkapan antara diskon spesifik per-item dan diskon global pada summary.

  • Perbaiki tabel PDF Jurnal agar tidak berantakan (Kolom nol jadi -, truncation).
  • Perbaiki tanggal mundur di SmartNote (Prompt MCP Server dipertegas).
  • Tangani Error 429/404 pada OCR (Suntik API Key ketiga & rotasi via iterasi ai_engine.py).
  • NEXT TODO: Kerjakan Edit Purchase Plan (Fitur CRUD Rencana Pembelian). Fitur ini berstatus “Pending” dan menunggu instruksi prioritas berikutnya.