think
16px
820px

Smoke-Revision Batch 4 — 2026-07-10 (all done + deployed @551eed73)

TL;DR: kelima item selesai dan live. Ringkasan AI sekarang di-cache (13,2 dtk run pertama → 0,08 dtk buka ulang — terverifikasi live), markdown-nya dirender rapi + justified. Bukti Setor rewrite DIBANGUN (bukan cuma roadmap): tabel "Daftar Setoran" live di review Pendirian PT dengan 18 baris setoran ternyata terbaca dari slip bank + rekening koran + SK bank di submission demo-mu. Backend 2475/0 · frontend 970/0.

1. Ringkasan AI — cache + markdown + justify

Aspek Sebelum Sesudah
LLM run Setiap buka halaman (~13–17 dtk kerja GPU) Sekali per submission — hasil disimpan di Submission.aiSummary; buka ulang 0,08 dtk (terverifikasi live di 341b7930)
Regenerasi Tidak ada Tombol "Perbarui" di kartu (POST {refresh:true}) — untuk data yang berubah setelah ringkasan dibuat
Render Markdown mentah (**...** kelihatan) react-markdown dengan tipografi scoped: heading/bold/bullet/inline-code dirender benar
Alignment Kiri Justified (+ hyphenation)

Berlaku otomatis di SEMUA halaman yang memakai kartu bersama (pendirian/perubahan/akuisisi/penggabungan/pembubaran/berakhirnya/peleburan/laporan RUPS).

2. Bukti Setor rewrite — "Daftar Setoran" (dibangun penuh)

Sesuai spek: tidak ada lagi kolom file/jenis dokumen (sumber file tetap bisa dilihat di expander Detail per baris). Yang tampil adalah fakta setoran yang dikompilasi lintas file bukti setor:

  • Ekstraksi baru: sub-tipe bukti bank (slip bank, rekening koran, surat keterangan bank, neraca) — yang selama ini classify-only tanpa OCR sama sekali — sekarang di-OCR (PaddleOCR) lalu di-ekstrak satu panggilan 3B guided-JSON: bank, cabang, no. rekening penerima, nama penerima, pengirim/penyetor, jumlah, tanggal transfer, no. transaksi/referensi, keterangan. Semua nilai di-ground verbatim ke teks OCR (jumlah di-ground pada runtutan digitnya — separator boleh beda); halusinasi → null, baris kosong → dibuang.
  • Komponen dinamis: kolom yang null di SEMUA baris submission itu di-drop — persis "banyak yang if-exists"-mu. Satu rekening koran bisa menyumbang banyak baris; slip satu.
  • No backwards compatibility: scan lama tanpa transferFacts tidak menyumbang baris; section tetap tampil dengan empty state. Tidak ada yang "pecah" — data lama diabaikan, bukan dimigrasi.
  • Terverifikasi live di 341b7930 setelah reprocess: 18 baris setoran (Mandiri slip ×2 — Rp 27,5 M + Rp 22,5 M ke rek. AKURAT UNGGUL BERKAR; BCA rekening koran; BRI KCP Padang Pasar dari SK bank). Baris display-only — cross-check modal tetap di rules MODAL_BUKTI_SETOR dst.

Catatan jujur: kualitas nilai per baris mengikuti kualitas scan (contoh: OCR koran BCA menghasilkan beberapa jumlah/tanggal yang aneh — nilainya verbatim dari teks OCR, bukan karangan LLM). Ini evidence display; kalau mau tier "please review" dengan confidence per-cell, itu iterasi berikutnya.

3. Bug lama: TAHUN_LAPORAN_VALID "FAIL padahal sudah dipilih"

Analisis-mu dikonfirmasi dan diperbaiki menyeluruh — window backlog sekarang di-anchor ke submission.createdAt (stabil per submission), di TIGA permukaan yang sebelumnya bisa saling beda:
1. Rule TAHUN_LAPORAN_VALID (sebelumnya new Date() per evaluasi — window bisa bergeser di bawah pilihan yang tadinya valid),
2. PUT /tahun-laporan (gate 422),
3. Dropdown: review-data sekarang mengirim tahunWindow {min,max} dari server dan FE merender opsi dari situ — sebelumnya dropdown dibangun dari jam browser, yang bisa menawarkan tahun yang server tolak (lead call-site-mu). Soal lead async /revalidate: jalur PUT tahun-laporan ternyata sudah await chain revalidasi yang serialized per-submission, jadi stale-FAIL transien lewat jalur itu sudah tertutup; regression test baru mem-pin perilaku anchor.

4. Font template: OCR-A → Arial

Kedua set template docx dibangun ulang dengan Arial — SP Pendirian PP dan Surat Keterangan Perbaikan (templater + blank). Di container, fontconfig otomatis substitusi Liberation Sans (metrik identik dengan Arial) saat konversi PDF; di Word pengguna, Arial asli.

5. Kartu "Belum punya Surat Pernyataan?"

Redesign: panel aksen ber-gradient + blok ikon, judul/deskripsi yang menjelaskan alur builder ("isi formulir → PDF siap ttd & materai"), CTA utama "Buat Surat Pernyataan →" menonjol, dan unduhan template/contoh diturunkan jadi text-link kecil. Screenshot-verified.

Deploy record

ahu-ai-ocr:551eed73 di Server 2 (:3520); migrasi 20260710120000_submission_ai_summary_cache + 20260710130000_bukti_setor_transfer_facts auto-applied; bukti-setor docs submission demo di-reprocess in place; summarize cache + Daftar Setoran + kartu CTA diverifikasi live via screenshot.