think
16px
820px

Flow Design — Perubahan Yayasan (PERUBAHAN_YAYASAN)

Status: as-built 2026-08-19 (increment 1-6 + halaman pola-PT, belum di-commit) + roadmap dokumen yang DIPUTUSKAN.
Rujukan: rencana implementasi docs/superpowers/plans/2026-08-13-nirlaba-perubahan-plan.md; perbandingan SABH lengkap + status implementasi perubahan-yayasan-sabh-vs-dev5.md (root dev_5, ter-upload ke think-server). Pendamping file ini: flow-pendirian-yayasan.md.

1. Ringkasan as-built

Satu route family nirlaba-perubahan melayani yayasan + perkumpulan, dengan halaman yang MENGIKUTI POLA PERUBAHAN PT (2026-08-19; halaman select interstitial sudah dihapus):

flowchart LR A["Unggah\n/:base/klasifikasi\n(board klasifikasi, lane pinned)"] --> B["Ekstraksi\n/:base/perubahan/:id/extraction\n(2 kolom: dokumen | entitas+jenis+validasi,\ngate Lanjut ke Tinjauan)"] B --> C["Tinjauan\n/:base/perubahan/:id/review\n(ReviewData engine 65% + PDF viewer 35%,\nkartu jenis + attestation + kehadiran)"] C --> D["Status\n/:base/perubahan/:id/status\n(PAD -> verifikator; pemberitahuan terminal;\nbadge verifikasi live, tanpa surat keluaran)"]
  • Unggah/Klasifikasi — board klasifikasi (lane yayasan/perkumpulan) mengenali akta perubahan dari kepala ("AKTA PERUBAHAN" + "YAYASAN X" lintas baris), membuat submission, lalu langsung ke ekstraksi.
  • Ekstraksi — halaman dua kolom pola PT: kolom kiri daftar dokumen (tambah/hapus/ulangi/pratinjau, drag-drop untuk surat pendukung), kolom kanan NirlabaPerubahanEntityCard (identitas menurut akta + entitas ter-resolve dari SABH via autoresolve + jenis terdeteksi, read-only) dan panel Hasil Validasi (override beralasan). Gate maju = tidak ada FAIL yang belum di-override (WARNING diselesaikan di Tinjauan). Skema ekstraksi superset perubahan: alamat_lengkap, dasar_rapat, perubahan_dinyatakan, referensi_pendirian.
  • Tinjauan — tenant ReviewData engine di atas projector delta nirlaba (review/projectors/make-nirlaba-delta-review.ts, terdaftar di REVIEW_REGISTRY): seksi Data Terdaftar (SABH, "sebelum"), Ringkasan Perubahan (diff per slice dari nirlaba-slice-diff — vocabulary yang sama dengan rules), seksi diff per jenis (gate-by-hiding via sectionsForJenis), roster delta organ (tambah/hapus/tetap), dan field akta (konfirmasi/edit + klik-ke-bbox di viewer PDF 35%). Tiga kartu SABH tetap di atas engine (pola RupsKehadiranSection PT): Jenis Perubahan (konfirmasi deteksi; simpan = re-validasi), Pernyataan Kelengkapan Dokumen, Daftar Hadir Rapat.
  • Submit — tetap POST /api/nirlaba/perubahan/:id/submit (bukan finalize generik): komponen PAD ke verifikator, murni pemberitahuan terminal; gate HAS_FAIL + ATTESTATION_INCOMPLETE + cek blokir ulang (ENTITY_BLOCKED). Halaman status meniru PT (2026-08-20): TANPA surat keluaran apa pun (SP/SK pratinjau dihapus; penerbit resmi sepenuhnya SABH) — header badge status verifikasi live + catatan penolakan, isi review read-only, redirect ke review saat PERBAIKAN.

Validasi inti: ENTITY_FOUND + ENTITY_NOT_BLOCKED (lookup registry SABH ter-enrich: identitas, kedudukan, domisili, organ, kegiatan, blokir), diff per jenis "wajib beda" (NAMA/KEGIATAN/KEDUDUKAN/DOMISILI/ORGAN_CHANGED), KUORUM_KEHADIRAN (daftar hadir vs roster registry, 2/3 rapat pertama, 1/2 rapat kedua), SURAT_PENDUKUNG_PRESENT, attestation gate di submit (ATTESTATION_INCOMPLETE).

1b. Pembanding data lama (as-built 2026-08-19)

Dua keputusan yang menentukan apakah diff berkata jujur:

Sumber "sebelum" adalah snapshot pra-filing, bukan registry terkini. tbl_badan_hukum selalu berisi keadaan mutakhir, jadi akta yang sudah pernah diproses SABH akan dibandingkan dengan hasilnya sendiri dan semua slice terbaca "masih sama". Karena itu lookup mencari transaksi milik akta ini di tbl_transaksi_yayasan_{tahun} (dicocokkan lewat nomor dan tanggal akta, toleransi satu hari karena kolom DATE MySQL kembali sebagai UTC), lalu memakai snapshot parent_nomor_transaksi-nya, yaitu keadaan yang benar-benar diubah oleh filing itu. Akta baru yang belum pernah difiling tidak cocok dengan riwayat mana pun dan tetap memakai registry terkini. Jejaknya disimpan di oldData.snapshot. Yayasan saja; perkumpulan menunggu verifikasi kolom tabel transaksinya.

Anggota organ dicocokkan per identitas, bukan per string. Satu rumah di services/nirlaba-organ-identity.ts, dipakai komparator organ, tabel delta di review, dan aturan kuorum, dengan dua tingkat: NIK lebih dulu bila kedua sisi punya 16 digit valid, lalu nama inti setelah gelar, sebutan, dan ekor bin/binti dibuang. Alasannya nyata di sampel NURUS SYURO: filing 2016 menulis "TN. H. JASMAN BIN HAJI JAWI" dan "TN. KARMIN BIN JAWI" (diketik manual ke formulir SABH), sedangkan akta 2026 menulis "H. JASMAN" dan "KARMIN". Pencocokan literal membacanya sebagai satu orang keluar dan satu orang masuk, sehingga delta organ menggelembung dan sebuah perubahan yang tidak mengubah susunan bisa GAGAL. Perbedaan ejaan adalah soal pencatatan, bukan perubahan organ; yang dihitung sebagai perubahan hanya orang keluar, orang masuk, atau jabatan berpindah (jabatan kosong di satu sisi tidak pernah dihitung berubah, karena SABH 2016 memang mengosongkannya untuk pembina dan pengawas).

Catatan pendukung: kolom identitas organ SABH bernama no_ktp_passport_pengurus dan npwp_pengurus, bukan nik/npwp seperti yang diasumsikan parser sebelumnya, sehingga NIK data lama dulu selalu null. Sudah diperbaiki. Nilai NIK pada filing lama sendiri sering berupa nomor bentukan (17 digit, kembar dengan NPWP), dan itu ditolak oleh lapis pencocokan karena bukan 16 digit.

2. Dokumen (as-built)

Dokumen Status Peran
Akta Perubahan Yayasan Wajib Dokumen otoritatif — sumber seluruh state "sesudah" + dasar rapat + referensi pendirian
Surat Pernyataan Tidak Dalam Sengketa dan Pailit (stsp_) Ada (wajib di SABH saat unggah akta) Store-only; auto-memenuhi butir attestation surat_pernyataan + nama_tidak_sengketa
Surat Pernyataan Pemilik Manfaat / BO (bo_yys_) Ada (wajib di SABH) Store-only
Surat Pernyataan Notaris (spn_yys_) Ada (wajib di SABH) Store-only; "penjamin" checklist deklaratif
Dokumen lain Opsional Store-only

Ketiga surat pendukung dikenali 3 tingkat: text layer PDF dulu (paddle merusak judul tebalnya), teks OCR, lalu prefix nama file slot SABH. Checklist syarat-dokumen SABH (minuta, notulen, NPWP+SPT, bukti setor, biaya nama, tidak sengketa) ditiru sebagai attestation ber-gate jenis, dengan butir yang didukung unggahan nyata tercentang otomatis (mekanisme ATTESTATION_EVIDENCE).

3. Roadmap dokumen (DIPUTUSKAN Efran, 2026-08-18; tabel dikonfirmasi 2026-08-19)

Ringkasan PT vs Yayasan (perubahan):

Dokumen PT Yayasan Data yang digantikan
Akta perubahan Ada (wajib) Ada (wajib) Isi perubahan, susunan baru, dasar rapat
Berita Acara / Notulen rapat Ada Ada (as-built 2026-08-19)NOTULEN_RAPAT_NIRLABA: focused pass nirlaba-notulen memprefill daftar hadir + basis + rapat ke Prefill centang kuorum + tanggal rapat + memenuhi butir notulen_rapat
KTP Ada Ada (as-built 2026-08-19) — extractor reuse PT NIK anggota organ baru
Paspor / KITAS Ada Ada (as-built 2026-08-19) Organ WNA
NPWP Ada (perorangan) Ada (as-built 2026-08-19) — memenuhi butir fotokopi_npwp + alamat_npwp (tanda terima SPT tetap deklaratif, belum ada DocumentType SPT) Verifikasi NPWP
Surat pernyataan domisili / Kades-Lurah Ada Ada (as-built 2026-08-19) — memenuhi butir kedudukan_surat_pernyataan + alamat_surat_pernyataan Alamat baru
Data kontak Ada Ada (as-built 2026-08-19) Email, telepon
Akta Pemindahan Hak Ada (peralihan saham) - Khas saham PT
Penetapan Ganti Nama PS Ada - Khas PT
Surat pernyataan tidak sengketa & pailit - Ada (sudah auto-memenuhi attestation) Unggahan wajib SABH yayasan
Surat pernyataan BO Gap kecil: slot SABH "Surat Persetujuan Pemilik Manfaat" (opsional) belum ada di lane PT Ada Unggahan wajib SABH yayasan
Surat pernyataan notaris - Ada Unggahan wajib SABH yayasan
Bukti persetujuan pemakaian nama tidak perlu Dicoret — cukup rule NAMA_AVAILABILITY cek registry -
Bukti setor PNBP/voucher tidak perlu Dicoret — paritas sebenarnya = validasi nomor voucher ke billing (di luar scope); checklist tetap deklaratif -

R1 — Notulen Rapat Pembina + daftar hadir — SELESAI (as-built 2026-08-19)

Terbangun sebagai: DocumentType NOTULEN_RAPAT_NIRLABA (migrasi 20260819100000), aturan judul di probe classifier lane nirlaba (NOTULEN|BERITA ACARA|RISALAH + RAPAT|KEPUTUSAN, ter-anchor judul supaya akta yang sekadar mengutip rapat tidak tertangkap), carrier OCR-only + focused pass nirlaba-notulen (services/nirlaba-notulen-extract.ts): tier deterministik (jenis rapat, tanggal (dd-mm-yyyy), "rapat kedua") + satu panggilan 3B guided-JSON untuk daftar hadir, tiap nama di-ground ke rawText (nama tak ter-ground dibuang, bukan disimpan). Hasilnya:
- memprefill Submission.nirlabaKehadiran (HANYA saat masih kosong — input notaris tidak pernah ditimpa), sebelum validasi berjalan sehingga KUORUM_KEHADIRAN langsung menilai di run yang sama;
- mengisi basis kuorum + rapat ke (1/2) dari notulen (fallback dasar_rapat akta tetap ada);
- auto-memenuhi butir attestation notulen_rapat via ATTESTATION_EVIDENCE.

Di SABH dokumen ini hanya dicentang "dimiliki notaris" — mengunggahnya adalah nilai tambah OCR, sejalan filosofi dokumen-sumber-data.

R2 — Dokumen identitas + sumber data (reuse penuh dari PT) — SELESAI sebagian besar (as-built 2026-08-19)

As-built: katalog lane perubahan yayasan (YAYASAN_PERUBAHAN_DOC_TYPES) kini menerima KTP / Paspor / KITAS / NPWP / Surat Pernyataan Domisili / Data Kontak (semua opsional); extractor-nya flow-agnostic (dispatch per documentType) jadi langsung jalan; baris ATTESTATION_EVIDENCE ditambah (fotokopi_npwp, alamat_npwp, kedudukan/alamat_surat_pernyataan — nilai peta kini array DocumentType). Ikut terperbaiki: tiga surat pendukung tidak lagi jatuh ke fallback documentType="AKTA" di mapToDocumentType. Masih terbuka: validasi silang KTP vs susunan organ baru (belum dibangun); tanda terima SPT (tidak ada DocumentType-nya); katalog perkumpulan menunggu sampel.

Rincian semula:

Dokumen Data Catatan
KTP NIK anggota organ BARU di akta Validasi silang susunan baru (analog R1 pendirian, sisi "after")
Paspor / KITAS Organ WNA
NPWP yayasan + tanda terima SPT Verifikasi NPWP Auto-memenuhi butir fotokopi_npwp
Surat pernyataan domisili / Kades-Lurah Alamat baru Ter-gate jenis kedudukan/alamat; auto-memenuhi butir attestation-nya; sumber pembanding DOMISILI_CHANGED
Data kontak Email + telepon

Semua enum + classifier + ekstraktor sudah ada (flow-agnostic). Pemetaan ATTESTATION_EVIDENCE tinggal ditambah baris. Perkiraan: 0.5 hari (+0.5-1 hari untuk validasi silang KTP vs susunan baru).

Dicoret (keputusan final 2026-08-18)

  • Bukti setor di flow perubahan — DIHILANGKAN sepenuhnya. Baris roadmap semula ("khusus perubahan modal") setelah klarifikasi dimaksudkan untuk perubahan PT, dan keputusan finalnya: disamakan dengan perubahan PT yang sudah berjalan — tidak ada dokumen bukti setor, dan tidak ada checkbox attestation baru untuk itu. Butir bukti_setor yang sudah as-built pada attestation yayasan (paritas checklist SABH yayasan) tidak berubah. Dasar klarifikasi: PNBP = biaya layanan flat per jenis (terutang semua perubahan, tak terkait modal) dan diverifikasi SABH lewat voucher ke billing, bukan kuitansi.
  • Bukti persetujuan pemakaian nama — tidak perlu upload; rule NAMA_AVAILABILITY mengecek registry langsung (lebih kuat dari kuitansi pesan-nama).
  • Kuitansi PNBP sebagai unggahan — SABH pun tidak pernah menerimanya; bila verifikasi finansial diinginkan kelak, jalurnya cek nomor voucher read-only ke SIMPADHU (pola apostille fast-track), tanpa pernah mengonsumsi voucher — opsi ditunda, di luar scope.

4. Terbuka / menunggu

  • Akurasi prompt ekstraksi perubahan baru terverifikasi pada SATU akta asli (NURUS SYURO No. 74) — hardening menunggu sampel tambahan.
  • Set surat pendukung perkumpulan berbeda (kepengurusan + penunjukan BO) — menunggu sampel.
  • Kartu attestation perubahan PT (checklist syarat_utama, opsi 2) — keputusan arah sudah ada, belum dibangun; butir bukti setor modal DIKECUALIKAN dari kartu (keputusan final 2026-08-18: disamakan dengan perubahan PT yang sudah berjalan, tanpa elemen bukti setor apa pun).