think
16px
820px

Mock output SK Pendirian PT (demo 28 Agustus 2026)

Status: landed on master working tree, behind SK_MOCK_DEMO (default OFF).
Tracking: https://app.clickup.com/t/z92046m13u
Tujuan: demo terlihat utuh sampai output — setelah step tinjauan (step 4)
selesai, notaris bisa membuka Contoh SK yang terisi dari data ekstraksi
dokumen yang diunggah.

Sistem ini tidak menerbitkan SK. Penerbitan SK resmi tetap di AHU Online /
AHU Rebuild. Semua keluaran di sini diberi watermark "CONTOH — BUKAN DOKUMEN
RESMI", banner mock, dan disclaimer; nomor SK/pendaftaran/daftar perseroan dan
tanda tangan pejabat adalah dummy.

Cara mengaktifkan di environment demo

SK_MOCK_DEMO=on            # wajib — tanpa ini endpoint 404 & tombol tidak muncul
# SK_MOCK_TEMPLATE_DIR=/srv/templates/sk-pendirian-pt   # opsional: tukar layout tanpa rebuild
# SK_MOCK_PEJABAT="(nama pejabat)"                      # opsional: nama di blok tanda tangan

Restart backend. Tidak ada migrasi DB, tidak ada perubahan skema.

Alur

flowchart LR U[Unggah dokumen] --> E[Ekstraksi OCR + LLM] E --> R["Tinjauan step 4
(konfirmasi per-field)"] R -->|Finalisasi| C[COMPLETED] C --> B1["Tombol 'Lihat Contoh SK'
banner selesai + halaman status"] B1 --> P["/pendirian/:id/sk-mock"] P -->|"GET /api/submissions/:id/sk-mock"| S["loadSkMock()"] S --> D["buildSkMockTokens()
ekstraksi → field SK"] D --> T["template HTML swappable
+ watermark CONTOH"] T --> V["iframe srcDoc
Cetak / Simpan PDF · Unduh HTML"]

Yang landed

Berkas Isi
backend/templates/sk-pendirian-pt/sk-pendirian-pt.html template swappable — halaman 1 (keputusan) + halaman 2 (lampiran), A4, watermark, QR placeholder
backend/templates/sk-pendirian-pt/README.md kontrak token + cara menukar template & logo
backend/src/lib/sk-mock-template.ts renderer {{TOKEN}} / {{{RAW}}} / {{#LOOP}} (±60 baris)
backend/src/services/sk-mock-pendirian-pt.ts pemetaan ekstraksi → field SK (buildSkMockTokens, murni) + pembacaan Prisma (loadSkMock)
backend/src/routes/sk-mock.ts GET /api/submissions/:id/sk-mock (di mount /api/submissions yang sudah ada ⇒ kebijakan auth tidak berubah)
backend/src/config.ts, lib/env-schema.ts, routes/public-config.ts flag SK_MOCK_DEMO + SK_MOCK_TEMPLATE_DIR + SK_MOCK_PEJABAT
frontend/src/pages/SkMockPage.tsx halaman pratinjau: iframe srcDoc, Cetak/Simpan PDF, Unduh HTML, catatan data
frontend/src/routes.tsx rute /pendirian/:submissionId/sk-mock
PtPendirianReviewPageV2.tsx, SubmissionStatusPage.tsx tombol "Lihat Contoh SK" (hanya saat flag on)

Tes: sk-mock-pendirian-pt.test.ts (9, tanpa DB), sk-mock-load.test.ts (3,
baca Prisma), sk-mock.test.ts (3, gate flag + rute), SkMockPage.test.tsx (2).

Pemetaan data (ekstraksi → SK)

Field SK Sumber
{{NAMA_PT}} akta nama_perseroan (prefix PT dinormalkan, tidak dobel)
{{NOTARIS}} / {{KEDUDUKAN_NOTARIS}} akta nama_notaris / kedudukan_notaris
{{NO_AKTA}} / {{TGL_AKTA}} akta nomor_akta / tanggal_akta (dinormalkan "15 Juli 2026")
{{KEDUDUKAN}} / {{JENIS_PERSEROAN}} akta kedudukan_perseroan / jenis_perseroan
{{TGL_PERMOHONAN}} submission.createdAt
{{TGL_PENETAPAN}} / {{TGL_DAFTAR}} submission.updatedAt saat COMPLETED
{{MODAL_DASAR/DITEMPATKAN/DISETOR}} AktaModal
tabel lampiran AktaPemegangSaham + AktaKomisaris + AktaDireksi, satu baris per orang (digabung by nama ternormalisasi; jabatan digabung "Pemegang Saham / Direktur Utama")
{{NO_SK}}, {{NO_PENDAFTARAN}}, {{NO_DAFTAR}} dummy deterministik (hash submission id) — bukan nomor registri
{{PEJABAT}} SK_MOCK_PEJABAT, default (nama pejabat)

Nilai yang tidak ada dirender dan dilaporkan lewat notes (ditampilkan
sebagai "Catatan data" di halaman) — celah data terlihat, bukan disembunyikan.

Trade-off yang diambil

  1. HTML + cetak-browser, bukan PDF/docx server-side. Generator lain di repo
    ini memakai docxtemplater + LibreOffice. Untuk mock ini HTML dipilih karena:
    contoh SK resmi AHU belum ada (template wajib bisa ditukar cepat),
    watermark/kop/QR jauh lebih murah di CSS, dan tidak ada round-trip
    LibreOffice per tampilan. Konsekuensi: tidak ada artefak PDF di server —
    PDF dihasilkan lewat "Cetak / Simpan PDF" di browser. Kalau AHU minta berkas
    PDF/DOCX resmi, itu pekerjaan lanjutan (bisa dipasang di generator yang sama).
  2. Endpoint JSON, bukan text/html. Endpoint HTML bisa dibuka di tab baru
    tanpa konteks aplikasi; untuk dokumen yang terlihat seperti keputusan
    menteri, afordansi itu sengaja tidak diberikan. SPA mengambil HTML lewat
    apiFetch (bearer) dan menaruhnya di <iframe srcDoc>.
  3. Nomor dummy deterministik, bukan acak — demo yang diulang menampilkan
    nomor yang sama, dan tidak ada peluang bertabrakan dengan urutan AHU.
  4. Klasifikasi Saham = "Saham Biasa" (label generik): ekstraksi akta belum
    punya field kelas saham. Dilaporkan di notes.
  5. Logo tidak di-commit. Template menampilkan kotak placeholder sampai
    logo.png ditaruh di direktori template (repo ini tidak menyimpan lambang
    resmi Kemenkumham).

Butuh keputusan / lanjutan

  • Contoh SK resmi dari AHU — begitu PDF-nya masuk repo, template dipotong
    ulang mengikuti tata letak resmi (token tidak perlu berubah).
  • Logo Kemenkumham — taruh logo.png di direktori template.
  • QR code — sekarang placeholder. Kalau demo perlu QR yang bisa dipindai,
    perlu keputusan isinya (URL verifikasi? id submission?).
  • Terbilang modal dan kolom kelas saham menunggu contoh resmi.
  • Flow lain (Perubahan/PP/Yayasan) belum punya mock output — hanya
    PENDIRIAN_PT yang diminta untuk demo ini.