think
16px
820px

Flow Design — Pendirian Yayasan (PENDIRIAN_YAYASAN)

Status: TERIMPLEMENTASI (as-built, diperbarui 2026-08-18). Dokumen ini semula rancangan siap-eksekusi; kini mencerminkan kondisi kode aktual. Blocker S5 (sampel akta asli) sudah terselesaikan — lihat §8.
Scope: OCR + LLM ekstraksi & validasi lokal (read-only) untuk pendirian Yayasan di SABH. Padanan: flow-pendirian-perkumpulan.md.

1. Ringkasan scope & keputusan pengikat

Menggantikan pengisian form manual pendirian Yayasan dengan alur upload-and-process: notaris mengunggah akta pendirian, AI mengekstrak field, memvalidasi, lalu menampilkan Smart Review untuk dikoreksi. Read-only — hasil hanya untuk audit/validasi; tidak ditulis balik ke SABH (push REST di luar scope).

Keputusan yang mengikat rancangan ini (register terkunci — semuanya terlaksana di kode):

ID Keputusan Realisasi di kode
D1 Validasi lokal, read-only Tidak ada write-back; submit = terminal lokal
D3 Field penuh + Smart Review (ala Pendirian PT) Ekstraksi seluruh field akta, halaman review field-by-field
D4a Terminal, tanpa verifikator Berakhir "Selesai"; TERMINAL_TYPES (SABH tak punya verifikator pendirian yayasan — S1)
D5/D6 SABH = sumber kebenaran/kewajiban Field & dokumen wajib dari kode SABH, bukan asumsi regulasi
D7 SubmissionType terpisah PENDIRIAN_YAYASAN Enum + registry entry sendiri
D8′ v2-generic tenant (fork sudah pensiun) flows/yayasan-pendirian.tsdefineFlow standar; kustom via buildContext + extractor + rules; tanpa customProcess, tanpa hooks.beforeValidation (blob ekstraksi sudah membawa organ+kekayaan, context builder membacanya langsung)
D9 Satu fase — lokal + asing sekaligus Varian asing termasuk di v1 (diskriminator jenis_transaksi diekstrak dari akta)
D10 Extractor & context organ-aware bersama dgn diskriminator varian services/nirlaba-akta-extract.ts + schema/organ-nirlaba.ts bersama Yayasan⇄Perkumpulan (juga dipakai flow perubahan)
D11 Rule set inti (DIPERLUAS — lihat §7) 3 rule bersama nirlaba + 10 rule eksklusif Yayasan; rule KTP/NPWP tetap dibuang
D12 Functional, not deep (MVP solid) Alur inti benar; tidak over-engineered

2. Dokumen & varian (dari kode SABH — bukan asumsi)

KOREKSI PENTING (verifikasi kode, mengubah riset awal): pendirian Yayasan pada dasarnya flow satu dokumen. Surat-pernyataan (tidak sengketa/pailit, BO, notaris) yang sempat tercatat sebagai syarat pendirian ternyata milik PERUBAHAN (UploadAktaController.php:218, guard isYayasanPerubahanTransaksi, id_aksi 3). Tidak ada field file_ktp/file_npwp di BadanHukumAkta — Yayasan tak pernah mengunggah KTP/NPWP; identitas organ = data form (no_ktp_passport_pengurus).

Dokumen Wajib? Sumber kode Peran OCR
Akta Pendirian Yayasan (file_akta) Wajib BadanHukumAkta.php:26,275,286; UploadAktaController.php:84 (actionYayasan, id_aksi 2) Dokumen otoritatif — seluruh field diekstrak dari sini
Kuesioner BO ("02") Wajib (gate) UploadAktaController.php:92-93 (checkStatusQuestionnaire("02")) Bukan OCR — form terstruktur; disebut sebagai prasyarat, bukan target ekstraksi
Surat Pertimbangan Kemenlu (upload_syarat_asing) Wajib bila asing FormDataYayasan.php:143-144,162,638 (checkUploadSyarat, scenario input) Presence-only carrier (tanpa blob ekstraksi); rawText dipakai rule kecocokan isi (§7)
Residence Permit (KITAS/KITAP) Opsional Sensus SABH 2026-08-07: slot upload_syarat_asing di filing nyata kerap berisi residence permit, bukan surat Kemenlu DocumentType tersendiri (keputusan 2026-08-11); classifier keyword membedakannya dari surat Kemenlu

Kewajiban surat Kemenlu ditegakkan lewat rule (SYARAT_ASING_PRESENT), bukan checklist upload — variannya baru ketahuan setelah akta terekstrak, jadi requiredDocs flow hanya berisi akta.

Varian (diskriminator jenis_transaksi):
- Nasional (jenis_transaksi != 'asing'): akta + kuesioner BO. Identitas organ pakai NIK. Kekayaan awal minimum Rp10.000.000 (PP 63/2008).
- Asing (jenis_transaksi == 'asing' atau legacy corporate_asing, FormDataYayasan.php:227,434): + Surat Kemenlu; kekayaan awal minimal Rp100.000.000 (FormDataYayasan.php:434-436); identitas organ pakai paspor + negara + KITAS. Nilai jenis_transaksi yang tak terbaca diperlakukan sebagai nasional (FAIL tak boleh menyala dari nilai yang tak bisa dijelaskan operator).

3. UI flow (4 step — akta-first, ala PT)

Akta = dokumen otoritatif (seperti PT, bukan flipped ala PP). Terminal (tanpa verifikator). Stepper pakai YAYASAN_LABELS (flow-steps.ts), route family yayasan.

Step Label Isi
1 Unggah Notaris unggah akta (+ Kemenlu / residence permit bila asing). Warning wajib bila akta belum ada (AKTA_PRESENT hard-block).
2 Klasifikasi Classifier nirlaba in-app (§6) menandai akta yayasan; board review/override.
3 Proses & Periksa Ekstraksi akta (grounded, §4) → organ + kekayaan + metadata; cross-validation (§7); vision retry otomatis untuk scan rusak.
4 Review & Submit Smart Review field-by-field (autolock ≥ 0.95, pensil manual-fill untuk field wajib yang tak terbaca) + hasil validasi (PASS/WARNING/FAIL); submit → Selesai (terminal).

Section Smart Review (dari flows/yayasan-pendirian.ts): Identitas Yayasan, Organ Yayasan, Kekayaan Awal, Data Akta & Notaris, Hasil Validasi.

3a. Mermaid — UI flow / step

flowchart LR A[1. Unggah
akta, dok asing opsional] --> B[2. Klasifikasi
title-tier nirlaba + board override] B --> C[3. Proses & Periksa
ekstraksi grounded + validasi] C --> D[4. Review & Submit
Smart Review field-by-field] D --> E((Selesai
terminal, read-only)) A -. akta belum ada .-> W[/AKTA_PRESENT: hard-block/] W -. blokir lanjut .-> A

3b. Mermaid — arsitektur & data flow backend (as-built)

flowchart TD UP[Upload akta] --> KL["Klasifikasi
nirlaba-akta-classifier (title tier)
short-circuit sebelum rantai PT"] KL --> DISP["dispatchProcessor()
submission-dispatch.ts"] DISP -->|"engine === v2-generic"| RF["runFlow(id, yayasanPendirianFlow)
flow-engine/processor.ts"] RF --> EX["extractNirlabaAkta
PaddleOCR layout → LLM (gateway) →
OCR grounding + harvest kekayaan/pembukaan akta"] EX -->|"gejala scan rusak"| VR["Vision retry
nirlaba-vision-retry.ts"] VR --> EX EX --> CTX["buildYayasanPendirianContext
(tanpa hooks — blob sudah membawa organ+kekayaan)"] CTX --> VAL["Cross-validation
YAYASAN_PENDIRIAN_RULE_SET (13 rule, §7)"] VAL --> READY[status READY → Smart Review] VAL -. NAMA_AVAILABILITY .-> SABH[("SABH MySQL readonly
tbl_order_name + tbl_badan_hukum
base='yayasan' — nirlaba-nama-availability.ts")] READY --> SUBMIT[Submit → COMPLETED terminal]

3c. Mermaid — sequence ekstraksi

sequenceDiagram participant U as Notaris participant K as KlasifikasiPage participant P as runFlow (engine) participant O as extractNirlabaAkta (organ-aware) participant S as SABH readonly U->>K: unggah akta (+dok asing bila ada) K->>P: create PENDIRIAN_YAYASAN + start P->>O: ekstrak akta (primaryAkta AKTA_PENDIRIAN_YAYASAN) O-->>P: organ (pembina/pengurus/pengawas) + kekayaan + metadata, grounded + confidence riil P->>S: NAMA_AVAILABILITY (paritas proses pesan-nama, base=yayasan) S-->>P: konsumable? / ditolak? / sudah terdaftar? P->>P: 13 rule (§7) P-->>K: READY → Smart Review (field + PASS/WARN/FAIL)

4. Ekstraksi (as-built): schema + pipeline grounded

Schema backend/src/schema/akta-yayasan.ts; tipe organ bersama di schema/organ-nirlaba.ts (D10 — OrganMember termasuk tanggal_lahir ISO, amandemen dev4 2026-08-11). Extractor bersama services/nirlaba-akta-extract.ts (paket 1 kontrak dev4): PaddleOCR (text+words) → LLM baca schema varian → OCR groundingExtractedField dengan confidence riil + BoundingBox + blob penuh di rawExtractionJson. Tanpa worker GPU-server (arsitektur apostille/PP, bukan PT).

Kebijakan confidence (inti modul — LLM tidak dimintai self-confidence karena tak terkalibrasi):
- Field verbatim (nama, angka, kedudukan): di-ground ke kata OCR. Ketemu → confidence dari kata OCR di lokasi itu (plus bbox gratis untuk PDF viewer). Tak ketemu → nilai dipertahankan pada confidence rendah 0.40 (beda dgn apostille yang drop-to-null) — field akta itu bahan review, "tampak tapi diragukan, pensil tersedia" adalah semantik Smart Review.
- Field turunan (tanggal ISO, jenis_transaksi terinferensi, enum jangka waktu, flag maksud): fixed 0.75 — sengaja di bawah ambang autolock; manusia mengonfirmasi setiap nilai turunan.
- Autolock ≥ 0.95 (cermin PP_AUTOLOCK_CONFIDENCE): pensil hanya muncul di tempat sistem ragu.

Tambahan pipeline: kekayaan-harvest.ts + akta-opening-harvest.ts (panen deterministik Pasal 5 & pembukaan akta), latin-confusables.ts (perbaikan glyph OCR), dan vision retry (nirlaba-vision-retry.ts) — skor gejala scan rusak memicu baca ulang halaman tersangka via model vision.

Field → mapping ke form legacy SABH:

Field ekstraksi Tipe Mapping SABH (FormDataYayasan)
nama_yayasan string nama_yayasan
nama_singkat string|null nama_singkat
nama_asing string|null nama_asing (asing)
kedudukan { provinsi, kabupaten } obj provinsi_nama_yayasan, kabupaten_nama_yayasan (provinsi jarang tertulis di akta — diturunkan dari kabupaten via registry wilayah)
jangka_waktu enum(terbatas|tidak_terbatas) jangka_waktu, tahun_jangka_waktu
maksud_tujuan { sosial, kemanusiaan, keagamaan } flags + teks bidang_sosial/kemanusiaan/keagamaan + keterangan_*
kekayaan_awal { nilai, nilai_terbilang, jenis, sumber[] } number + enum kekayaan_awal, jenis_kekayaan_awal, sumbangan/pemisahan/wakaf/hibah/... — angka vs terbilang diperiksa silang (§7)
npwp_yayasan string|null npwp_yayasan
organ (diskriminator varian: yayasan) obj (lihat bawah)
akta { nomor, tanggal, notaris_nama, notaris_kedudukan } obj nomor_akta, tgl_akta, notaris_akta

Organ Yayasan (pembina[], pengurus[], pengawas[]) — setiap anggota:
{ nama, jabatan, nik/paspor/kitas, tanggal_lahir?, negara?, status_kewarganegaraan? } → SABH nama_pengurus, jabatan_pengurus, no_ktp_passport_pengurus, negara, kitas_pengurus, status_kewarganegaraan (organ dibedakan via organ_yayasan = PEMBINA/PENGURUS/PENGAWAS, OrganYayasanForm.php:11-13).

Diskriminator varian (D10): extractor menerima variant: "yayasan" | "perkumpulan" yang memilih daftar organ (Yayasan: Pembina/Pengurus/Pengawas) & prompt section. Nasional→NIK; asing→paspor+negara+KITAS.

5. Field yang di-extract vs yang manual/form

  • Diekstrak dari akta (OCR value): nama, kedudukan, jangka waktu, maksud/bidang, kekayaan awal + sumber, seluruh organ + jabatan + identitas + tanggal lahir, NPWP, nomor/tanggal akta, notaris, jenis_transaksi (turunan).
  • Bukan dari dokumen (tetap manual/registry): kuesioner BO (form), voucher, provinsi (turunan registry wilayah).
  • Manual-fill (pensil): field wajib SABH yang selalu tertulis di akta tapi gagal terbaca (daftar REQUIRED_READ_FIELD_KEYS) di-render sebagai baris kosong yang bisa diedit; REQUIRED_FIELDS_PRESENT menyebutkannya per nama (§7).

6. Klasifikasi dokumen (as-built: in-app title tier, BUKAN model terlatih)

Realisasi berbeda dari rencana awal (pola apostille-LLM): classifier LayoutLMv3 terlatih hanya punya label PT — akta yayasan identik layout-nya dengan akta PT dan akan salah baca. Diskriminatornya adalah judul kepala-akta ("AKTA PENDIRIAN YAYASAN"), jadi yang dibangun adalah services/nirlaba-akta-classifier.ts:

  • Tier 1 — judul (deterministik): regex ^-anchored, toleran titik/spasi/baris OCR; presisi ~100%, tanpa sampel training. Selalu aktif. Berjalan sebelum rantai refinement PT — hit nirlaba melakukan short-circuit; null jatuh ke jalur PT tak tersentuh (kepala akta PT tak pernah memuat "…YAYASAN"/"…PERKUMPULAN").
  • Tier 2 — LLM fallback (guided_json, cermin apostille-classifier): DORMANT di balik NIRLABA_CLASSIFIER=llm sampai sampel perkumpulan tersedia.

Label nirlaba (== DocumentType): AKTA_PENDIRIAN_YAYASAN, AKTA_PENDIRIAN_PERKUMPULAN, AKTA_PERUBAHAN_YAYASAN, AKTA_PERUBAHAN_PERKUMPULANNIRLABA_AKTA_SUBTYPE_MAP memetakan label→varian yang memilih extractor/context organ-aware.

Kelas Untuk Catatan
AKTA_PENDIRIAN_YAYASAN akta utama (wajib, maxCount 1) primaryAkta.classifiedType
SURAT_PERTIMBANGAN_KEMENLU dok asing (opsional di checklist; kewajibannya via rule) presence-only; rawText untuk rule kecocokan isi
RESIDENCE_PERMIT KITAS/KITAP organ asing (opsional) kelas baru 2026-08-11 dari temuan sensus; nirlaba-syarat-asing-classifier.ts (detectSuratKemenlu / detectResidencePermit) membedakan keduanya via keyword

Reuse: untuk pendirian, tidak ada reuse KTP/NPWP (dokumen itu tak ada di flow ini).

7. Spesifikasi rule (as-built — D11 diperluas)

Perubahan dari register: rule identitas KTP/NPWP tetap DIBUANG (tak ada dokumen anchor). D11 asli (5 rule) tumbuh menjadi 13 rule: 3 bersama nirlaba (rules/nirlaba-shared) + 10 eksklusif Yayasan (rules/yayasan-pendirian/index.ts), termasuk ekstensi #7-#9 yang meng-anchor akta terhadap dirinya sendiri (disepakati 2026-08-11).

Non-overridable (YAYASAN_NON_OVERRIDABLE_RULE_CODES, keputusan 2026-08-11): AKTA_PRESENT, SYARAT_ASING_PRESENT — KEBERADAAN dokumen wajib bukan judgment call operator; hanya ISI yang boleh di-override. Endpoint override menolak kode ini, engine finalize memblokir FAIL-nya walau overridden, FE mencerminkan daftarnya (pola NON_OVERRIDABLE_RULE_CODES PP).

Rule Severity Inti Overridable
AKTA_PRESENT (bersama) FAIL Akta pendirian belum diunggah tidak
ORGAN_COMPLETENESS (bersama) FAIL (2026-08-13; semula WARNING) Organ belum lengkap: {daftar kosong} ya (extraction-doubt)
NAMA_AVAILABILITY (bersama) PASS/FAIL Paritas proses pesan-nama SABH (2026-08-13): reservasi konsumable (belum kedaluwarsa/terpakai/terblokir verifikasi — cermin FormDataYayasan + checkPesanNama) → PASS; ditolak SABH → FAIL dgn alasan sama; terdaftar tbl_badan_hukum base=yayasan → FAIL; tanpa jejak → FAIL "belum dipesan" hanya saat confidence nama_* rendah; nama terverifikasi → terkunci, remedinya pesan nama + revalidasi
KEKAYAAN_AWAL_PRESENT WARNING Nilai tak terbaca / tak wajar; plus deteksi angka vs terbilang bertentangan (kasus nyata JIMMYAN: "Rp 1.000.000" vs "satu miliar" — bentuk ANGKA yang dipakai, verifikator melihat konfliknya) ya
KEKAYAAN_ASING_MIN FAIL (asing) Kekayaan awal < Rp100.000.000 (FormDataYayasan.php:434); SKIPPED bila nasional / nilai tak terbaca (satu masalah satu laporan) ya (extraction-doubt; nilai terverifikasi → terkunci)
KEKAYAAN_NASIONAL_MIN FAIL (nasional) Padanan sisi nasional (2026-08-14): kekayaan awal < Rp10.000.000 (PP 63/2008); bentuk sama dgn saudaranya ya (extraction-doubt)
REQUIRED_FIELDS_PRESENT WARNING Semua field wajib SABH yang selalu tertulis di akta, diperiksa KETERBACAAN-nya (2026-08-14, generalisasi dari cek metadata akta; kasus RUMBAI: kartu "Data Akta & Notaris" kosong tanpa sinyal). Remedinya vision retry / re-upload / pensil manual-fill. Provinsi sengaja TIDAK dicek (akta hampir tak pernah menuliskannya) ya
SYARAT_ASING_PRESENT FAIL (asing) Surat Kemenlu belum diunggah (checkUploadSyarat). Sensus menemukan filing asing lolos SABH tanpa file — itu bukti celah enforcement SABH, bukan lisensi menirunya tidak
SYARAT_ASING_CONTENT WARNING (asing) Isi dokumen bertipe Kemenlu benar-benar surat Kemenlu? Kedua fixture negatif = residence permit di slot ini; remedinya re-map tipe dokumen. SKIPPED bila teks belum terbaca ya
ORGAN_IDENTITY_COMPLETE WARNING Setiap anggota harus datang dgn nama + identitas (NIK/paspor/KITAS) + jabatan terbaca — tanpa rule ini blanks duduk diam di board (kasus CICILIA/HO 2026-08-12, JUNGCHANHEE 2026-08-13) ya
ORGAN_NIK_TTL_MATCH (#7) WARNING NIK meng-encode tanggal lahir (digit 7-12, +40 utk perempuan, UU Adminduk 24/2013) — akta membawa checksum-nya sendiri; via lib/nik-birthdate. Sampel: 13 orang, 11 match, 1 mismatch = typo di AKTA (maka WARNING, bukan FAIL) ya
ORGAN_NIK_FORMAT (#8) WARNING NIK sah = tepat 16 digit; kedua akta sampel memuat NIK 17-digit asli. SKIPPED bila tak ada NIK (organ asing) ya
ORGAN_RANGKAP (#9) WARNING UU Yayasan (Psl 29, Psl 40(4)) melarang rangkap antar organ; kasus sampel = baris "Pendiri" ikut terbaca sebagai Pembina (slip ekstraksi). Match by NIK, fallback nama ya

Dibuang (tak ada anchor di pendirian yayasan): NIK_KTP_ORGAN, NAMA_NPWP_ORGAN, KTP_COMPLETENESS, NPWP_COMPLETENESS, NAMA_BH_CONSISTENCY, dan seluruh rule saham/modal/bukti-setor/KBLI.

8. Sampel & golden set (blocker S5 SELESAI)

Sampel akta asli dari SABH tiba bertahap 2026-08-07 s.d. 2026-08-14 — prompt extractor sudah dituning dan diuji akurasi terhadapnya. Manifest lengkap: docs/samples/yayasan/README.md (PDF + .expected.json tidak di-commit — gitignored, berisi NIK/alamat).

  • Akta: 2 nasional (1 born-digital, 1 scan) + 3 asing (scan 52-54 hlm; organ WNA Korea/RRT; satu dgn provinsi tertulis; satu dgn konflik angka-vs-terbilang kekayaan = kasus uji emas).
  • Syarat asing: 1 surat pertimbangan Kemenlu asli (n=1 — jangan anchor keyword dari ini saja) + 2 residence permit yang ditemukan menghuni slot upload_syarat_asing (fixture positif RESIDENCE_PERMIT sekaligus fixture "bukan-Kemenlu").
  • Golden set: file kembar <basename>.expected.json di samping tiap PDF untuk uji akurasi ekstraksi; temuan lapangan per sampel (nama terbalik, NIK 15/17 digit, identitas di pasal penutup, dsb.) tercatat sebagai temuan bernomor di README sampel dan sudah menjadi rule §7.

Yang dulu ditandai BLOCKED-ON-S5 (prompt extractor, uji akurasi organ/kekayaan) kini live; sisa dormansi hanya LLM-fallback classifier perkumpulan (§6) yang menunggu sampel perkumpulan.

9. Roadmap

R1 — Dokumen identitas organ (KTP / Paspor+KITAS) + validasi silang antar-dokumen (ditambahkan 2026-08-18)

Menambahkan dokumen identitas sebagai syarat pendirian Yayasan, dengan pemeriksaan silang terhadap roster organ di akta. Ini melampaui paritas SABH secara sengaja: SABH tidak pernah meminta KTP/NPWP untuk pendirian yayasan (temuan §2), dan justru karena itu D11 membuang seluruh rule identitas — tidak ada dokumen anchor. Item ini MENCIPTAKAN anchor tersebut, sehingga rule yang dulu dibuang bisa hidup kembali dalam bentuk yayasan.

Bentuk kebutuhan (per anggota organ, bukan checklist statis):
- Anggota WNI: KTP.
- Anggota WNA: Paspor + KITAS/KITAP (kelas RESIDENCE_PERMIT yang hari ini opsional naik status menjadi bagian syarat; paspor kemungkinan butuh DocumentType baru).
- Karena jumlah dokumen mengikuti isi roster (baru diketahui setelah ekstraksi akta), penegakan lewat rule coverage per-anggota (pola PP BO), bukan requiredDocs statis.

Validasi silang yang direncanakan (anchor akta ⇄ dokumen identitas):
- NIK di KTP vs NIK anggota di akta (exact digit).
- Nama di KTP/paspor vs nama di akta — toleran urutan kata terbalik (kasus nyata sampel: Pembina "ASLAN BURHAN" = pemegang permit "BURHAN ASLAN").
- Tanggal lahir KTP vs NIK (reuse lib/nik-birthdate) dan vs tanggal_lahir akta.
- Nomor paspor di residence permit vs paspor anggota di akta (kasus nyata sampel: JUNGCHANHEE, paspor cocok).
- Kepemilikan: setiap dokumen identitas harus terpetakan ke tepat satu anggota organ; dokumen tak terpetakan = temuan.

Reuse yang tersedia: classifier + extractor KTP milik flow PT; kelas RESIDENCE_PERMIT + nirlaba-syarat-asing-classifier; pola coverage & guard dokumen-bersama dari PP BO (satu dokumen bisa dirujuk beberapa baris — jangan hapus fisik tanpa cek referensi).

Keputusan yang masih terbuka:
- Severity kelengkapan: filing SABH nyata sah TANPA dokumen ini, jadi absennya dokumen kemungkinan WARNING (bukan FAIL pemblokir) atau FAIL-yang-overridable — perlu keputusan produk sebelum implementasi.
- Mismatch hasil cross-check: WARNING overridable (konsisten dengan kebijakan ORGAN_NIK_TTL_MATCH — typo bisa di sisi akta).
- Dampak D10: skema kebutuhan yang sama layak dipertimbangkan untuk Perkumpulan (modul bersama) sekaligus.

R2 — Dokumen sumber data: NPWP perorangan, surat domisili, data kontak (diputuskan 2026-08-18)

Melengkapi R1 dengan tiga dokumen "pengganti ketikan" yang sama-sama sudah dipakai flow PT — reuse penuh, terverifikasi: document-processor men-dispatch ekstraktor murni berdasarkan documentType (flow-agnostic), enum + classifier terlatih + ekstraktor semuanya sudah ada.

Dokumen Data yang digantikan Catatan
NPWP perorangan NPWP pengurus Cross-check nama vs organ akta (bagian dari validasi silang R1)
Surat pernyataan domisili Alamat lengkap kantor (RT/RW, kelurahan, kecamatan, kodepos) Akta pendirian biasanya hanya menyebut kedudukan kabupaten
Data kontak Email + telepon Pola DATA_KONTAK PT

Severity mengikuti keputusan R1: mulai WARNING per dokumen (filing SABH nyata sah tanpa dokumen-dokumen ini), dinaikkan ke wajib setelah kebiasaan pengguna terbentuk.

R3 — Kekayaan awal + wasiat (diputuskan 2026-08-18)

  • Bukti setor kekayaan awal — reuse keluarga BUKTI_TRANSFER-* milik PT, berstatus opsional-verifikasi: SABH yayasan sendiri deklaratif ("Bukti penyetoran ATAU pernyataan tertulis dari pendiri", _formPengisianYayasan.php:1401), jadi ini bukan kebutuhan paritas melainkan nilai tambah OCR — cross-check angka vs kekayaan_awal akta; paling bernilai untuk yayasan asing dengan floor Rp100 juta (KEKAYAAN_ASING_MIN sudah ada).
  • Akta/kutipan wasiat — DocumentType BARU (satu-satunya di roadmap pendirian), store-only + rule yang ter-gate bila akta menyatakan sumber kekayaan hibah wasiat; menggantikan 4 kolom wasiat yang di SABH diketik manual (nomor_wasiat, tanggal_akta_wasiat, nama_pemberi_wasiat, notaris + kedudukannya). Khas yayasan: nol kemunculan wasiat di model perseroan (PT didirikan dengan perjanjian, bukan wasiat; warisan di PT = peralihan saham pada perubahan).

Perkiraan R2+R3 gabungan: sekitar 1 hari (di luar validasi silang R1 yang ±1 hari sendiri).