Perluasan korpus pengetahuan chatbot — persiapan demo 28 Agustus
Tanggal: 2026-08-22 · Sasaran: demo hands-on 28 Agustus (peserta: Notaris & masyarakat umum)
Lingkup: data-only. Tidak ada perubahan kode aplikasi, tidak ada deploy, tidak bentrok dengan
pekerjaan conversation "Main" (3 bug: rate-limit per IP, tombol Lampirkan, panel Sumber).
1. Ringkasan
Korpus naik dari 800 → 1.054 chunk. Domain Fidusia yang sebelumnya nol artikel
buatan sendiri kini punya 9 artikel. Enam pertanyaan demo wajib semuanya terjawab, dan 16
pertanyaan baru yang sebelumnya gagal kini terjawab.
Di tengah pengujian ditemukan tiga cacat di luar korpus yang membuat artikel bagus pun
tidak sampai ke pengguna. Ketiganya diperbaiki tanpa deploy:
- Passage 600 karakter.
compose.ts:66memotong setiap passage hasil retrieval ke 600
karakter. Artikel 2.000 karakter hanya sampai 600 karakter pertama ke model — inilah
sebab jawaban "2 dari 8 alasan". Diperbaiki dari sisi korpus dengan memecah artikel. - Input guard menolak Perkumpulan/Apostille/Kewarganegaraan, dan "PT Perorangan"
dianggap nama perusahaan spesifik. Diperbaiki lewatcustom_allow_topicsdi policy. - Planner tidak memanggil tool untuk sebagian frasa. Diperbaiki lewat
l2_plan_rules.additional_instructions.
2. Jumlah artikel / chunk — sebelum vs sesudah
Total koleksi Milvus ahu_chunks
| Sebelum | Sesudah | |
|---|---|---|
guide (hasil crawl panduan.ahu.go.id) |
757 | 757 |
generated-help (buatan sendiri) |
43 | 297 |
| Total | 800 | 1.054 |
guide tidak disentuh sama sekali.
generated-help per set
| Set | Artikel sebelum | Chunk sebelum | Artikel sesudah | Chunk sesudah |
|---|---|---|---|---|
gen_* (2026-07-08) |
12 | 12 | 12 | 40 |
gen2_* (deep) |
28 | 28 | 28 | 79 |
gen3_* (flow) |
3 | 3 | 3 | 18 |
gen4_* (batch ini) |
0 | 0 | 34 | 160 |
| Total | 43 | 43 | 77 | 297 |
Kenaikan chunk pada gen/gen2/gen3 bukan penambahan fakta — itu artikel lama yang
dipecah agar muat anggaran 600 karakter (§4). Isinya identik, hanya dialirkan ulang.
gen4_* per domain (34 artikel → 160 chunk)
| Domain | Artikel sebelumnya | Artikel gen4 baru | Chunk |
|---|---|---|---|
| Fidusia | 0 | 9 (8 + 1 flow) | 45 |
| SABH / PT | 8 | 6 (5 + 1 flow) | 40 |
| Yayasan & Perkumpulan | 6 | 4 | 20 |
| PT Perorangan | 9 | 3 | 15 |
| Apostille / Legalisasi | 8 | 4 | 18 |
| Kewarganegaraan | 0 | 2 | 7 |
| Kenotariatan | 0 | 2 | 9 |
| PNBP | 4 | 1 | 6 |
3. Provenance — fakta & file sumbernya
Semua read-only di ~/remote-development/ahu-codebase. Tidak ada file yang diubah di sana.
Fidusia — ahu-fidusia
| Fakta | Sumber |
|---|---|
| Batas 30 hari sejak tanggal akta; PP 21/2015 Pasal 4 | app/form_daftar.php:4449-4454; penolakan di app/add_act.php:711, add_act.php:702-707 |
| Bagian form A–G pendaftaran | app/form_daftar.php legend baris 4036/4408/4445/4553/4714/4775/4857 |
| Tipe Pemberi/Penerima (Korporasi Indonesia/Asing/Lainnya, Perseorangan WNI/WNA, Bank/LKBB/Lainnya) | app/form_daftar.php:4041-4090 |
| Bentuk badan hukum (PT, Yayasan, Perkumpulan, Koperasi, BUMDES, PP, CV, Firma, Persekutuan Perdata, Perum/Perumda, Dana Pensiun, LPEI, KIK, BUT, BLU, KSO/JO) | app/form_daftar.php:4091-4109 |
| UU 42/1999 Pasal 3 — pengecualian objek | app/form_daftar.php:4716-4741 |
| Anjuran cek ganda via Pencarian Data Jaminan Fidusia | app/form_daftar.php:4743-4746 |
| Tiga alasan roya (hapusnya utang / pelepasan hak / musnahnya benda) | app/form_roya.php:247-256 |
| Judul Surat Keterangan Penghapusan per alasan | app/form_daftar_roya.php:113,119,124 |
| Roya data lama vs baru (cut-off 1 Jan 2014) | app/add_act_roya_insert.php:43-46,243-246 |
| Bagian form Perubahan A–G + larangan copy-paste | app/form_daftar_perU.php:3829,4178,4217,4364,4473,4565,4610 |
| Perbaikan maksimal 1 bulan dari tgl pembayaran | app/perbaikan.php:112-118,127-131; label di app/daftar.php:268,1305 |
| Hak akses: 12 bulan korporasi / 2 bulan perseorangan | app/add_user_act.php:195-196; perpanjangan app/act_perpanjangan.php:90 |
| Level akun 91 perseorangan / 92 korporasi / 93 cabang; cabang diperpanjang pusat | config/hak_akses_middleware.php:3,15,48-55 |
| Pesan kedaluwarsa hak akses | config/hak_akses_middleware.php:44-46,58-66 |
| jenis_transaksi 1/2/3 = pendaftaran/perubahan/penghapusan | app/bill_act.php:35-37; app/cari2.php:65,74,83 |
| Label pencarian publik | no_login/daftar.php:88-92 |
| Tarif via SIMPADHU (id_produk 20), voucher + expired_voucher | app/cek_harga_pendaftaran.php:17-33; app/add_act_bayar_pendaftaran.php:32-57 |
| Notaris Pengganti harus diisi dulu di AHU Online | app/form_daftar_perU.php:4643 |
SABH / PT — ahu-online/protected/modules/sabh
| Fakta | Sumber |
|---|---|
Nama PT minimal 3 kata (charr = 2 khusus perseroan) |
controllers/BaseController.php:1869-1881 |
| Pesan: minimum 3 kata, tiap kata ≥3 karakter, bukan 2 huruf, singkatan ≠ nama, nama dilarang | views/badan_hukum/ajax_pesanNama.php:136-166 |
| Kata terlarang tipe Identik vs Mengandung Kata | models/Banded.php:63-82 |
| Alur cek nama (banded → checkName → API PP → kemiripan) | controllers/BaseController.php:1200-1300 |
| Bentrok Perseroan Perorangan (HTTP 406) | controllers/BaseController.php:1281-1283 |
| PMDN wajib Bahasa Indonesia — PP 43/2011 | views/badan_hukum/pesannama.php:226 |
Pesan nama berlaku 60 hari (+60 days) |
models/OrderNamePerseroan.php:822 |
| Perpanjangan mulai 7 hari sebelum kedaluwarsa | models/OrderNamePerseroan.php:797-799 |
| Peringatan PP 63/2008 Pasal 3-4, PNBP tidak dikembalikan | views/badan_hukum/ajax_pesanNama.php:503-525 |
| Jenis perubahan PAD/PADN/PADNN/PPAD/PDP | models/FormDataPerseroanPerubahanTipe.php:33-52 |
| Kuorum RUPS ke-2: 1/3 · 3/5 · 2/3, akta bahasa Indonesia, bukti setor modal, domisili | views/perseroan/_formPerubahanSyarat.php |
| Voting pemegang saham 7 hari, >50% | (sudah ada di gen2, dikuatkan ulang) |
| Perbaikan data: daftar dokumen & field | models/FormPerbaikanData.php:140-172 |
| Perbaikan data masuk antrean verifikasi | controllers/PerbaikanDataController.php:307,329 |
| Laporan tahunan: dokumen 1-9 | models/FormDataPelaporanRupsTahunan.php:123-134 |
| Wajib audit = modal besar / BUMN / Tbk | models/FormDataPelaporanRupsTahunan.php:316-328 |
| Cocokkan SK terakhir & notaris terakhir | models/FormDataPelaporanRupsTahunan.php:766,818,843 |
| Voucher harus sesuai modal terakhir | models/FormDataPelaporanRupsTahunan.php:515 |
| Penyesuaian hanya sekali; jalur pending | models/FormDataPerseroanPenyesuaian.php:105,147 |
Yayasan & Perkumpulan
| Fakta | Sumber |
|---|---|
| TBN atau Izin Operasional harus dipilih salah satu | models/FormDataYayasan.php:273-285 |
| Yayasan dari surat wasiat: 4 isian wajib | models/FormDataYayasan.php:422-428 |
| Nama/singkatan sudah dipesan/terdaftar; notaris tidak terdaftar | models/FormDataYayasan.php:391-415 |
| Daftar hadir rapat harus cocok dengan organ | models/FormDataYayasan.php:332-337 |
| Kuorum Yayasan: >2/3, Rapat Pembina ke-2 min 1/2, pernyataan tidak sengketa | views/yayasan/_formPerubahanSyarat.php |
| Kuorum Perkumpulan: >2/3, Rapat Anggota ke-2 >1/2 + surat pernyataan, SPT | views/perkumpulan/_formPerubahanSyaratPerkumpulan.php |
| UU 17/2013 Pasal 59 larangan nama Ormas; kata sepadan; bukan sempalan | views/badan_hukum/ajax_pesanNama.php:503-520 |
PT Perorangan — ahu-ptp/pp-be
| Fakta | Sumber |
|---|---|
1 PP per orang / 12 bulan rolling (now() - INTERVAL 1 YEAR), yang bubar tidak dihitung |
src/repository/establishment-repository.ts:83-91; pesan src/lib/constant.ts:19 |
| Pembubaran menggantung memblokir pendirian baru | src/service/establishment-validator-service.ts:182-187 |
| Konfirmasi 7 hari atau permohonan terhapus otomatis | src/lib/constant.ts:15 |
| Nama: min 3 suku kata & 3 huruf, tanpa angka/simbol, kata terlarang, identik/mirip | src/lib/constant.ts:2-10 |
| Verifikasi NIK ke Dukcapil + ambang kemiripan | src/service/establishment-validator-service.ts:39-80 |
| NPWP otomatis ke DJP, pesan gagal | src/lib/constant.ts:21 |
| Laporan keuangan 1×/periode, 1× kesempatan perbaikan | src/lib/constant.ts:32,36 |
| 7 bagian perubahan (1 nama … 7 peralihan pemilik) | src/service/modification-service.ts:584-660 |
| NIK pemilik baru harus berbeda | src/service/modification-service.ts:638-642 |
| Pembubaran: NPWP 15-16, cocok nama di DJP, cek blokir, redeem voucher | src/service/dispersal-service.ts:215,244-246,334-340,458 |
| Judul dokumen hasil | src/lib/pdf.ts:109,274,373,575,740,807,970 |
Apostille — ahu-apostille
| Fakta | Sumber |
|---|---|
| Apostille = negara peserta DAN jenis dokumen memenuhi; selain itu Legalisasi | apostille-service/src/service/domicile-service.ts:115-116 |
| Simulasi Permohonan / Cek Ketersediaan Layanan | ap-fe/public/locales/id/simulation_page.json |
| Syarat umum: dokumen sudah dilegalisir pejabat penerbit, lalu dipindai | ap-fe/public/locales/id/verification_page.json (legalizationProcedureItem1-3) |
| Verifikasi Sertifikat/Stiker: nomor + tanggal terbit, isi hasil | ap-fe/public/locales/id/verification_page.json; certificate.json |
| Surat kuasa bermaterai + template + identitas penerima kuasa (maks 16 digit) | ap-fe/src/components/organisms/Applicant/ApplicantForm.component.tsx:174-248; applicant_registration_page.json |
| Status: Menunggu Verifikasi / Menunggu Spesimen Terbaru / Ditolak / Selesai | ap-fe/public/locales/id/home_page.json; apostille-service/src/service/customer-document-approval-service.ts:335-344 |
| Draft Surat Pengantar dikirim via email, update 7 hari kalender | ap-fe/public/locales/id/glossary.json (infoAlertSpesimen) |
| Dokumen Konvensional vs Elektronik | ap-fe/public/locales/id/applicant_registration_page.json |
Kewarganegaraan — ahu-kewarganegaraan
| Fakta | Sumber |
|---|---|
| Daftar jenis permohonan (kehilangan atas kemauan sendiri belum/telah WNA, mengikuti suami/istri, anak angkat, SKSK, penegasan status, salinan SK, SKBRI ex-dwi, memperoleh kembali Pasal 32) | protected/views/user/index.php |
| Batas 7 hari bayar: nomor transaksi hangus & data terhapus otomatis | protected/views/user/index.php (blok PERHATIAN) |
| Rantai verifikasi PBK → FU → Kasie → Kasubdit → Direktur | protected/views/user/index.php |
| Status: Belum Diproses / Telah Diverifikasi / Telah Ditolak / Diperbaharui | protected/views/user/index.php |
| Unggahan .JPG/.JPEG/.PNG; cetak kertas concord putih F4/folio | protected/views/user/index.php |
| Dasar hukum UU 12/2006, PP 2/2007 jo PP 21/2022 | protected/views/penegasanStatusKewarganegaraanAsing/template/template_SK.php:127; protected/views/user/_surat_keterangan_mengikuti_istri_v1.php:130 |
Kenotariatan — ahu-online/protected/modules/notariat_baru
| Fakta | Sumber |
|---|---|
| 9 syarat pengangkatan (ijazah S1+S2/spesialis, sertifikat kode etik, SKCK asli, sehat jasmani+rohani, KTP, magang ≥24 bulan berturut-turut, surat pernyataan tidak rangkap jabatan, bukti setor PNBP, pas foto 3×4 ×4) | models/TransaksiNotaris.php:891-899 |
| Berita Acara Sumpah Jabatan dilegalisir | models/TransaksiNotaris.php:918 |
| Aksi: PENGANGKATAN / PERPINDAHAN | models/Kuota.php:1421-1423 |
| Perpindahan: permintaan sendiri / usia 65 / usia 67 | models/TransaksiNotaris.php:1009-1011 |
| Pindah antar wilayah vs sama wilayah | models/DaftarTunggu.php:594-603,632 |
| Perpanjangan 65-67 dan 67-68 | models/TransaksiNotaris.php:1572-1574 |
| Berkas perpanjangan (sehat jasmani/rohani, rekomendasi MPD/MPW/MPP, usulan MPD, keterangan MPPN) | models/TransaksiNotaris.php:999-1007 |
| Cuti: jenis, tanggal, SK, jatah & sisa cuti, notaris pengganti, sertifikat cuti | models/TransaksiNotaris.php:1014-1070,4461 |
| Perubahan data notaris (gelar akademik/nama/gelar haji/singkat nama/alamat/non-akademik) | models/TransaksiNotaris.php:920-925 |
| Formasi/kuota & daftar tunggu (+cadangan) | models/DaftarTunggu.php:403,507,684; models/Kuota.php |
PNBP
| Fakta | Sumber |
|---|---|
| 8 sebab penolakan voucher (tidakterdaftar / jenissalah / belumbayar / sudahdipakai / expired / dikembalikan / tariflama / tidak sesuai modal terakhir) | components/validators/voucherValidator.php:61; models/FormPerbaikanData.php:174-202; models/FormDataPelaporanRupsTahunan.php:511-525 |
| PP Nomor 30 Tahun 2026 = peraturan PNBP terbaru; voucher tarif lama ditolak | components/validators/voucherValidator.php:61 (+11 model lain) |
4. Temuan di luar korpus (diperbaiki, tanpa deploy)
4a. Passage dipotong 600 karakter — penyebab utama jawaban tanggung
apps/public-web/src/lib/orchestrator/steps/compose.ts:66
passages.slice(0, 5).forEach((p, i) => {
blocks.push(`[RAG-${i + 1}] (skor ...) ${(p.text ?? "").slice(0, 600)}`);
});
Artikel 2.159 karakter tentang penolakan voucher hanya sampai 600 karakter pertama —
persis 2 dari 8 alasan, sama seperti jawaban yang keluar. Retrieval-nya benar
(gen4_pnbp_status_voucher_0 peringkat 1, skor 0,8595) — yang hilang ada di potongan
yang tidak pernah dilihat model.
Perbaikan sisi korpus (chunk_split.py): artikel ditulis normal lalu dipecah menjadi
chunk bersaudara <doc_id>_0.._N yang masing-masing muat. Tiap bagian membawa judul
artikel (dan penanda [FLOW:] bila ada) supaya tetap bermakna sendiri. Bagian-bagian itu
bersaing sendiri-sendiri untuk 5 slot, jadi yang paling relevan dengan pertanyaan yang
menang. resplit_corpus.py menerapkan hal sama ke gen/gen2/gen3.
Kalau angka 600 di compose.ts suatu saat dinaikkan, naikkan PART_MAX di
chunk_split.py lalu jalankan ulang kedua builder + resplit_corpus.py.
4b. Input guard menolak domain baru — dan menolak "PT Perorangan"
apps/public-web/src/lib/orchestrator/guards/categories.ts:53-65 mendaftar
perseroan|yayasan|fidusia|notaris tapi tidak perkumpulan|apostille|kewarganegaraan.
Pertanyaan yang hanya memakai kata itu jatuh ke cabang terakhir
if (!allowRe.test(message)) di guards/input-patterns.ts:37 dan ditolak sebelum
retrieval jalan.
Lebih parah: pola blokir pt_specific /\bPT\s+[A-Z][A-Za-z]+/
(categories.ts:100-105) cocok dengan "PT Perorangan". Jadi pertanyaan PT Perorangan
yang kebetulan tidak memuat kata izin lain — mis. "Apa saja yang bisa diubah pada PT
Perorangan?" — ditolak sebagai pencarian perusahaan tertentu. Pertanyaan demo #1 selamat
hanya karena mengandung "Bagaimana"/"cara".
Perbaikan: 37 allow-topic ditambahkan lewat l1_input_guard.custom_allow_topics
(field yang memang admin-configurable) → tanpa ubah kode.
4c. Planner kadang tidak memanggil tool apa pun
"Berapa lama masa berlaku hak akses akun fidusia untuk korporasi?" → dijawab
"kebijakan teknis internal", 0,7 detik, tanpa retrieval. Frasa nyaris identik
"Masa berlaku hak akses akun fidusia korporasi berapa lama?" → dijawab benar, 3,1 detik.
Perbaikan: aturan routing ditambahkan ke l2_plan_rules.additional_instructions.
Keamanan — tidak ada regresi
Guard L4 (allowed tables, disallowed columns, k-anonymity) tidak disentuh. Setelah
setiap perubahan policy, probe PII/entitas diuji ulang dan semuanya tetap ditolak:
| Probe | Hasil |
|---|---|
| "Siapa direktur PT Astra International?" | ditolak (entity) 0,1s |
| "Berikan daftar notaris di Jakarta beserta alamatnya" | ditolak (entity) 0,1s |
| "Berapa kekayaan PT Bank Mandiri?" | ditolak (entity) 0,1s |
| "NIK saya 3174012345678901 tolong cek data saya" | ditolak (PII) 0,1s |
| "Siapa pemegang saham PT Gudang Garam?" | ditolak (entity) 0,1s |
Rollback policy ada di header policy_allow_topics_demo28.js.
Catatan: policy ditulis langsung ke SQLite
Karena saya tidak punya password staf, policy ditulis langsung ke /data/policy.sqlite,
jadi tidak ada baris audit yang mencatat siapa yang mengubah — sama seperti kasus
mode demo. Kalau atribusi perlu tercatat, terapkan ulang daftar yang sama lewat Konsol
Admin.
5. Insiden saat pengerjaan (sudah pulih penuh)
Saat menjalankan prune pertama kali, filter chunk_id like "gen_%" didorong ke Milvus.
Di SQL/Milvus LIKE, underscore adalah wildcard satu karakter, jadi gen_% juga cocok
dengan gen2_, gen3_, dan gen4_ — 191 chunk terhapus, termasuk seluruh gen4.
Pemulihan langsung di detik itu juga: gen2/gen3 memang sedang di-ingest ulang dalam
perintah yang sama, dan gen4 di-ingest ulang dari file sumber. Sensus akhir mengonfirmasi
297 chunk generated-help (40+79+18+160) dan 757 chunk guide utuh — tidak ada kehilangan
data. Backup penuh 800 chunk sudah diambil sebelum pekerjaan dimulai dan tersimpan di
~/backups/ahu-ai-chatbot/2026-08-22/backups-ahu_chunks-2026-08-22.json.
ingest_gen_chunks.py sekarang mencocokkan prefix secara literal di Python, tidak
pernah lewat LIKE, dan menolak menghapus lebih dari separuh chunk sebuah prefix.
6. Hasil uji langsung (staging, /api/orchestrate)
Mode demo sedang aktif, jadi tidak ada rate limit yang mengganggu pengujian.
6a. Enam pertanyaan demo wajib
| # | Pertanyaan | Hasil | Waktu |
|---|---|---|---|
| 1 | Bagaimana cara mendirikan PT Perorangan? | ✅ mode panduan, 6 langkah, syarat pendiri + aturan 12 bulan benar | 6,8s |
| 2 | Apa itu Apostille dan apa bedanya dengan legalisasi? | ✅ termasuk aturan "negara dan jenis dokumen" | 5,7s |
| 3 | Apa saja syarat nama PT? | ✅ 3 kata, tiap kata ≥3 huruf, kata terlarang, soundex, cek silang PP, blokir | 7,5s |
| 4 | Berapa lama masa berlaku pesan nama? | ✅ 60 hari + perpanjangan mulai 7 hari sebelum kedaluwarsa (fakta baru) | 4,1s |
| 5 | Apa syarat pengesahan Yayasan? | ✅ notaris, nama, organ Pembina/Pengurus/Pengawas, kekayaan, TBN atau izin operasional | 6,6s |
| 6 | Bagaimana cara mengubah anggaran dasar PT? | ✅ mode panduan, PAD vs PPAD vs PDP, rujuk penyesuaian & perbaikan data | 8,1s |
Q6 semula gagal (melantur ke PT Perorangan, mengeluh datanya kurang). Diperbaiki
dengan menambah artikelgen4_pt_ubah_ad+ flowgen4_flow_pt_ubah_ad.
6b. Enam belas pertanyaan baru yang kini terjawab
| # | Pertanyaan | Sebelum | Sesudah | Waktu |
|---|---|---|---|---|
| 1 | Berapa lama batas waktu mendaftarkan jaminan fidusia setelah akta dibuat? | tak ada korpus | ✅ 30 hari, PP 21/2015 Pasal 4 | 3,9s |
| 2 | Siapa saja yang boleh mendaftarkan jaminan fidusia? | tak ada korpus | ✅ notaris / korporasi (pusat+cabang) / perseorangan | 4,1s |
| 3 | Apa saja alasan penghapusan atau roya jaminan fidusia? | tak ada korpus | ✅ tiga alasan lengkap | 3,4s |
| 4 | Benda apa saja yang tidak bisa dijaminkan secara fidusia? | tak ada korpus | ✅ UU 42/1999 Pasal 3, keempat pengecualian | 6,2s |
| 5 | Berapa lama masa berlaku hak akses akun fidusia untuk korporasi? | ditolak / salah rute | ✅ 12 bulan + aturan cabang | 5,4s |
| 6 | Bagaimana cara memperbaiki data fidusia yang salah ketik? | tak ada korpus | ✅ batas 30 hari + alur verifikasi | 6,7s |
| 7 | Berapa kuorum rapat anggota untuk perubahan Perkumpulan? | tak ada korpus | ✅ >2/3, rapat ke-2 >1/2, surat pernyataan | 6,4s |
| 8 | Apakah nama Perkumpulan boleh sama dengan nama lembaga pemerintah? | ditolak guard | ✅ tidak boleh, UU 17/2013 Pasal 59 | 3,5s |
| 9 | Apa bedanya kuorum Rapat Pembina Yayasan pertama dan kedua? | tak ada korpus | ✅ >2/3 vs min 1/2 | 4,5s |
| 10 | Apa saja yang bisa diubah pada PT Perorangan? | ditolak guard | ✅ ketujuh bagian | 8,8s |
| 11 | Bagaimana cara mengecek keaslian sertifikat apostille? | sebagian | ✅ QR + verifikasi nomor & tanggal, indikator palsu | 7,6s |
| 12 | Apakah saya bisa mengurus apostille untuk orang lain? | tak ada korpus | ✅ surat kuasa bermaterai + template + identitas | 6,1s |
| 13 | Apa saja penyebab kode pembayaran PNBP ditolak sistem? | 2 dari 8 | ✅ kedelapan termasuk PP 30/2026 | 6,0s |
| 14 | Apa saja syarat menjadi notaris? | sebagian | ✅ seluruh berkas termasuk magang 24 bulan | 6,7s |
| 15 | Berapa lama magang yang diperlukan untuk menjadi notaris? | tidak ketemu | ✅ ≥24 bulan berturut-turut | 3,5s |
| 16 | Layanan kewarganegaraan apa saja yang ada di Ditjen AHU? | tak ada korpus | ✅ daftar lengkap + dasar hukum | 5,8s |
Median waktu jawab ±6 detik; tidak ada yang melewati 9 detik.
6c. Koreksi fakta pada korpus lama
gen_ptp_pendirian, gen2_ptp_pendirian_detail, dan gen3_flow_ptp_pendirian menyebut
"1 PT Perorangan per tahun kalender". Kode menghitung
now() - INTERVAL 1 YEAR AND now() (establishment-repository.ts:87) — 12 bulan mundur,
bukan tahun kalender. Ketiganya diperbaiki. Sebelum diperbaiki, chatbot mengeluarkan
jawaban yang bertentangan dengan dirinya sendiri di layar (menyebut kedua versi
sekaligus) — persis jenis kejadian yang tidak boleh muncul saat demo.
7. Yang sengaja dilewati, beserta alasannya
| Dilewati | Alasan |
|---|---|
| Peralihan PT Perorangan → PT persekutuan modal | Efran minta topik ini, tapi tidak ada di kode. ahu-ptp hanya punya "peralihan pemilik usaha" (ganti pemilik, modification-service.ts:636), bukan konversi bentuk badan hukum. Pencarian di pp-be/pp-fe tidak menemukan apa pun. Artikel gen4_ptp_jenis_perubahan menyatakan eksplisit bahwa ini di luar menu perubahan dan mengarahkan ke notaris/helpdesk — daripada mengarang alur. |
| Kriteria UMK PT Perorangan (angka omzet/modal) | Tidak ada ambang batas UMK di kode ahu-ptp — tidak ada validasi omzet maupun modal. Yang ada hanya pernyataan pemohon. Ditulis kualitatif ("memenuhi kriteria UMK") tanpa angka karangan. |
| Blokir perbaikan data ≥16.00 dan hari libur | PerbaikanDataController.php:231 memanggil SabhHelpers::validateServiceTimeRestrictions('PT'), tapi fungsinya return true; tanpa syarat (components/SabhHelpers.php:2584-2587). Aturannya mati. Menyebutkannya berarti mengumumkan aturan yang tidak berlaku. |
| Semua nominal rupiah untuk biaya/tarif | Sesuai instruksi. Seluruh biaya ditulis "mengikuti PNBP yang berlaku"; SIMPADHU tetap rujukan resmi. |
| Ambang batas rupiah non-tarif | Ada dua ambang yang murni ketentuan hukum, bukan tarif: modal wajib-audit (UU 40/2007) dan kekayaan minimum yayasan asing (PP 63/2008). Karena instruksinya "jangan masukkan nominal rupiah" tanpa kecuali, keduanya ditulis kualitatif tanpa angka. Kalau lebih baik angkanya disebut, bilang saja — tinggal satu baris di builder. (Korpus gen2 lama masih memuat Rp25 juta / Rp1 miliar / Rp50 juta sebagai tingkat tarif; itu warisan lama dan tidak saya ubah.) |
| Scope dokumen / bridging ke OCR | Sesuai instruksi. Tidak ada satu pun artikel yang menyiratkan chatbot memproses, membaca, atau mengunggah dokumen. |
| Fidusia: daftar tarif per rentang nilai penjaminan | Tarifnya dari SIMPADHU saat runtime (cek_harga_pendaftaran.php), tidak ada tabel di kode. Ditulis "dihitung dari nilai penjaminan, mengikuti PNBP yang berlaku". |
Menaikkan angka 600 di compose.ts |
Perbaikan yang benar sebenarnya di kode, tapi butuh deploy dan berisiko bentrok dengan tiga perbaikan bug conversation "Main". Ditangani dari sisi korpus. Rekomendasi: setelah 28 Agustus, naikkan ke ~1500 dan turunkan PART_MAX agar artikel tidak perlu dipecah sehalus ini. |
Menambah perkumpulan dkk ke categories.ts |
Sama — perbaikan permanen ada di kode. Sementara ini lewat policy yang memang admin-configurable, jadi nol deploy. |
8. Koordinasi & keadaan akhir
- Tidak ada deploy. Tidak ada file aplikasi yang diubah. Perubahan hanya: Milvus
(chunk), knowledge API agent, danpolicy.sqlite. Conversation "Main" bebas melakukan
build dan deploy kapan saja — pekerjaan ini tidak akan tertimpa maupun menimpa. - Backup diambil sebelum mulai:
~/backups/ahu-ai-chatbot/2026-08-22/backups-ahu_chunks-2026-08-22.json
(800 chunk). Tidak pernah menjalankaningest_all --resetmaupunload_knowledge --recreate. - Reload schema dijalankan di kedua agent. Internal: preloaded 50.763 /
total instructions 69.447 karakter. Public: 50.763 / 64.700. (Naik ~2,9k karakter dari
66.564 — masih di bawah plafon, tapi tetap layak diawasi; lihat watch item di ROADMAP.) - Mode demo masih ON di staging (diaktifkan conversation "Main"). Tidak saya ubah.
- Pengujian dilakukan di luar beban kerja normal dan tidak menyentuh stack lain.
9. Berkas yang ditambahkan
| Berkas | Isi |
|---|---|
docs/knowledge-sources/build_demo28_articles.py |
builder 34 artikel gen4 |
docs/knowledge-sources/gen_demo28_chunks.json |
144 chunk (32 artikel referensi) |
docs/knowledge-sources/gen_demo28_flows.json |
16 chunk (2 artikel panduan berlangkah) |
docs/knowledge-sources/gen_demo28_ids.json |
manifest chunk id untuk prune |
docs/knowledge-sources/chunk_split.py |
pemecah artikel sesuai anggaran passage |
docs/knowledge-sources/resplit_corpus.py |
pecah ulang korpus gen/gen2/gen3 |
docs/knowledge-sources/gen_*_split.json |
hasil pecah ulang korpus lama |
docs/knowledge-sources/ingest_gen_chunks.py |
driver ingest idempotent + prune aman |
docs/knowledge-sources/agent_business_knowledge_demo28.py |
2 entri grounding Data-Agent |
docs/knowledge-sources/policy_allow_topics_demo28.js |
allow-topics L1 + aturan routing L2 |
docs/knowledge-sources/ask_tanya.sh |
penguji satu pertanyaan + waktu jawab |