Lanjut ke konten
Samkarsa Logbook

v1.0.0-009 : Konsolidasi Aturan Tetap (Core Rules) Kodebase

Mendokumentasikan seluruh aturan dan perilaku yang harus terus dipertahankan dalam arsitektur OCR dan NLP agar tidak terhapus pada update selanjutnya.

Jualan,Blonjo2mnt baca

Dokumen ini berisi kompilasi aturan-aturan esensial yang sudah ada di kodebase dan harus terus dipatuhi oleh seluruh agent dalam pengembangan lanjutan:

  1. Dua Tahapan Pemrosesan: Sistem terdiri dari dua tahap independen yang tidak boleh digabung.
    • Tahap 1: Ekstraksi gambar menjadi teks kasar (raw OCR).
    • Tahap 2: Transformasi (NLP Parsing) teks kasar menjadi JSON menggunakan parseTransaction.
  2. Fallback Mechanism OCR (Tiered):
    • Level 1: (Kini dinonaktifkan) Local OCR Xenova/trocr-small-printed di browser.
    • Level 2: AI Vision Server (Backend Sajen -> MCP ocrTool.ts).
    • Eksekusi AI pada ocrTool.ts mendahulukan Gemini Vision API dan akan fallback otomatis ke Ollama (LLaVA) lokal via ngrok jika Gemini gagal.
  3. Pemisahan Peran Agent NLP:
    • Fungsi NLP (Natural Language Processing) untuk merubah string ke JSON hanya boleh ditangani oleh prompt panjang dalam parseTransaction. OCR Vision dilarang keras mencoba membuat JSON berstruktur rumit, tugasnya hanya memindahkan tulisan dari gambar ke teks (transkripsi).

  1. Dilarang Mengarang Barang (Dummy): Jika input pengguna berupa ringkasan (“omset hari ini 5 juta”), field "items" harus berupa array kosong [].
  2. Kalkulator Otomatis: Jika pengguna tidak menyertakan grand total, sistem WAJIB menghitung sendiri (jumlahkan qty * unit_price). Tidak boleh ada grand total = 0.
  3. Pembacaan “=” dan “@”:
    • @ mengartikan harga satuan (unit price).
    • = mengartikan harga total (subtotal per item).
  4. Jatuh Tempo (Tempo / Hutang): Deteksi otomatis metode pembayaran. Jika tertulis jatuh tempo, maka payment_method: "tempo" dan due_date wajib diekstrak dalam format ISO 8601 (YYYY-MM-DD).

  1. Hindari Anchor Spesifik: Dalam menyusun system instruction dan negative prompt, jangan menyisipkan contoh kasus yang terlalu spesifik (misal nama vendor seperti “INDOMARCO”) sebagai sesuatu yang dilarang. Hal ini menyebabkan fenomena Prompt Bleed di mana model LLM malah menganggap kata tersebut sebagai kata kunci penting dan berhalusinasi mengeluarkannya.

Aturan-aturan ini terikat ke dalam file useOcrUpload.ts (Blonjo), ocr_worker.py (Sajen), ocrTool.ts (MCP-Server), dan transactionParser.ts (MCP-Server). Jangan ubah struktur alur di atas kecuali disetujui.