think
16px
820px

Schema Database: PP & Apostille (Sistem Legacy)

Digali dari source code ahu-ptp dan ahu-apostille. Definisi kolom bersumber dari repository file, model, dan SQL migration — karena entity class aktual ada di package private pp-repository / ap-repository yang tidak di-commit ke repo ini.


Daftar Isi


1. PP (Perseroan Perorangan) — Database v1_appp

Stack: MariaDB 10.5, TypeORM 0.2.32, Node.js
Services: pp-be (portal publik), pp-be-admin (back-office)

Diagram Relasi PP

erDiagram identity ||--o{ pp_master : "identities_id" identity ||--o{ establishment_pp : "identities_id" identity ||--o{ modification_pp : "identities_id" identity ||--o{ dispersal_pp : "identities_id" identity ||--o{ correction_pp : "identities_id" pp_master ||--o{ pp_master_history : "pp_master_id" pp_master ||--o{ pp_master_transaction_state : "pp_master_id" pp_master ||--o{ pp_master_transaction_number_count : "pp_master_id" pp_master ||--o{ modification_pp : "pp_master_id" pp_master ||--o{ dispersal_pp : "pp_master_id" pp_master ||--o{ announcement_transaction : "pp_master_id" establishment_pp ||--o{ establishment_pp_owner : "establishment_pp_id" establishment_pp ||--o{ establishment_pp_activities : "establishment_pp_id" establishment_pp ||--o{ establishment_pp_benefit : "establishment_pp_id" establishment_pp ||--o{ establishment_pp_history : "establishment_pp_id" modification_pp ||--o{ modification_pp_owner : "modification_pp_id" modification_pp ||--o{ modification_pp_activities : "modification_pp_id" modification_pp ||--o{ modification_pp_benefit : "modification_pp_id" modification_pp ||--o{ modification_pp_history : "modification_pp_id" modification_pp ||--o{ modification_pp_pt : "modification_pp_id" modification_pp_pt }o--|| pp_master : "pp_master_id" dispersal_pp ||--o{ dispersal_pp_owner : "dispersal_pp_id" dispersal_pp ||--o{ dispersal_pp_activities : "dispersal_pp_id" dispersal_pp ||--o{ dispersal_pp_benefit : "dispersal_pp_id" dispersal_pp ||--o{ dispersal_pp_history : "dispersal_pp_id" dispersal_pp }o--|| dispersal_reason : "dispersal_reason_id" correction_pp ||--o{ correction_pp_owner : "correction_pp_id" correction_pp ||--o{ correction_pp_activities : "correction_pp_id" correction_pp ||--o{ correction_pp_previous : "correction_pp_id" establishment_pp_activities }o--|| kbli : "kbli_id" modification_pp_activities }o--|| kbli : "kbli_id" dispersal_pp_activities }o--|| kbli : "kbli_id" correction_pp_activities }o--|| kbli : "kbli_id" identity ||--o{ identity_nik : "identities_id" identity ||--o{ identity_email : "identities_id" identity ||--o{ identity_group : "identities_id" identity_group }o--|| group : "group_id" group ||--o{ access_menu : "groups_id" sub_district }o--|| district : "district_id" district }o--|| city : "city_id" city }o--|| province : "province_id"

Group A — Transaksi Utama

pp_master

Fungsi: Satu baris = satu Perseroan Perorangan aktif. Selalu merefleksikan state terkini setelah konfirmasi. Diupdate setiap ada perubahan yang dikonfirmasi.

Kolom Tipe Keterangan
id BIGINT PK AUTO_INCREMENT
pp_type_id INT Selalu 1 (PP = Perseroan Perorangan)
transaction_type_id INT Tipe transaksi terakhir yang mengupdate baris ini
identities_id BIGINT FK → identity Pemilik perseroan aktif saat ini
prev_identities_id BIGINT FK → identity Pemilik sebelumnya (diisi saat peralihan pemilik)
next_identities_id BIGINT FK → identity Pemilik baru saat sedang dalam proses peralihan
vouchers_code VARCHAR Kode voucher PNBP
transaction_number BIGINT Nomor transaksi
certificate_number VARCHAR Nomor sertifikat (format AHU-XXXXXX.AH.01.30.Tahun YYYY untuk Pendirian / .31. untuk Perubahan)
perseroan_name VARCHAR(500) Nama perseroan
perseroan_alias VARCHAR Alias/nama singkat
perseroan_email VARCHAR Email perseroan
perseroan_address VARCHAR Alamat lengkap
perseroan_rt VARCHAR RT
perseroan_rw VARCHAR RW
perseroan_sub_district_id BIGINT FK → sub_district Kelurahan domisili
perseroan_postalcode VARCHAR Kode pos
perseroan_phone VARCHAR Nomor telepon
perseroan_capital NUMERIC Modal usaha
perseroan_npwp VARCHAR NPWP perseroan
perseroan_npwp_created_at DATETIME Tanggal terbit NPWP
perseroan_kpp_code VARCHAR Kode KPP Pajak
perseroan_kpp_name VARCHAR Nama KPP Pajak
file_statement VARCHAR Path PDF Surat Pernyataan Pendiri
file_certificate VARCHAR Path PDF Sertifikat resmi
kbli_value_json JSON Snapshot KBLI kegiatan usaha
owner_value_json JSON Snapshot data pemilik (Identity object)
benefit_value_json JSON Snapshot data pemilik manfaat (beneficial owner)
statement_name_similarity JSON Pernyataan kesamaan nama
statement_beneficial_owner JSON Pernyataan pemilik manfaat
statement_condition JSON Pernyataan kondisi (diisi saat pergantian pemilik)
section_value_json JSON Bagian apa yang terakhir diubah (1=Nama, 2=Email, 3=Alamat, 4=Modal, 5=KBLI, 6=Data Pemilik, 7=Pergantian Pemilik)
prev_owner_value_json JSON Snapshot pemilik sebelumnya
next_owner_value_json JSON Snapshot pemilik baru
is_approved INT 0=belum disetujui, 1=sudah disetujui pemilik baru
approved_at DATETIME Waktu persetujuan
is_blocked INT 0=normal, 1=diblokir
blocked_at DATETIME Waktu diblokir
status INT Lihat tabel status di bawah
created_at DATETIME
updated_at DATETIME
deleted_at DATETIME Soft-delete (default 9999-12-31 23:59:59)

pp_master_history

Fungsi: Snapshot pp_master setiap kali ada perubahan yang dikonfirmasi. Audit trail immutable.

Kolom Tipe Keterangan
id BIGINT PK AUTO_INCREMENT
pp_master_id BIGINT FK → pp_master
inserted_at DATETIME Waktu snapshot dibuat
(semua kolom dari pp_master) Disalin verbatim dari pp_master saat itu

pp_master_transaction_state

Fungsi: Mencatat setiap transaksi yang berhasil dikonfirmasi untuk satu pp_master. Satu baris per transaksi yang selesai.

Kolom Tipe Keterangan
id BIGINT PK AUTO_INCREMENT
pp_master_id BIGINT FK → pp_master
pp_type_id INT 1
transaction_type_id INT
identities_id BIGINT FK → identity
transaction_number VARCHAR
certificate_number VARCHAR
status INT
created_at DATETIME
updated_at DATETIME

pp_master_transaction_number_count

Fungsi: Sequence counter untuk pembuatan nomor transaksi PP. Satu baris per nomor yang di-generate.

Kolom Tipe Keterangan
id BIGINT PK AUTO_INCREMENT
pp_master_id BIGINT FK → pp_master
transaction_number_count INT Nilai counter saat dibuat
status INT 1 = aktif
created_at DATETIME
updated_at DATETIME

Group B — Pendirian (establishment_pp)

Alur: Pengguna submit → baris masuk establishment_pp (status 1) → user konfirmasi → status jadi 2, pp_master dibuat/diupdate.

establishment_pp

Fungsi: Menyimpan permohonan pendirian PP yang sedang / sudah diproses.

Kolom Tipe Keterangan
id BIGINT PK AUTO_INCREMENT
pp_type_id INT 1
transaction_type_id INT 1 (Pendirian)
identities_id BIGINT FK → identity Pendiri/pemilik
vouchers_code VARCHAR Kode voucher
transaction_number BIGINT Nomor transaksi
certificate_number VARCHAR Nomor sertifikat (diisi setelah konfirmasi)
perseroan_name VARCHAR(500) Nama perseroan
perseroan_alias VARCHAR Alias
perseroan_email VARCHAR Email
perseroan_address VARCHAR Alamat
perseroan_rt VARCHAR RT
perseroan_rw VARCHAR RW
perseroan_sub_district_id BIGINT FK → sub_district
perseroan_postalcode VARCHAR
perseroan_phone VARCHAR
perseroan_capital NUMERIC Modal
perseroan_npwp VARCHAR NPWP (diisi setelah integrasi DJP)
perseroan_npwp_created_at DATETIME
perseroan_kpp_code VARCHAR
perseroan_kpp_name VARCHAR
file_statement VARCHAR Path Surat Pernyataan
file_certificate VARCHAR Path Sertifikat
kbli_value_json JSON KBLI snapshot
owner_value_json JSON Pemilik snapshot
benefit_value_json JSON Pemilik manfaat snapshot
statement_name_similarity JSON
statement_beneficial_owner JSON
statement_condition JSON
status INT 1=Belum konfirmasi, 2=Sudah konfirmasi, 3=Dihapus
created_at DATETIME
updated_at DATETIME
deleted_at DATETIME Soft-delete (default 9999-12-31 23:59:59)

establishment_pp_owner

Fungsi: Pemilik yang mendaftarkan permohonan pendirian ini.

Kolom Tipe Keterangan
id BIGINT PK
establishment_pp_id BIGINT FK → establishment_pp
identities_id BIGINT FK → identity
owner_value_json JSON Snapshot Identity saat submit
status INT 1=Baru, 2=Dikonfirmasi, 3=Dihapus
created_at DATETIME
updated_at DATETIME
deleted_at DATETIME

establishment_pp_activities

Fungsi: Kegiatan usaha (KBLI) untuk permohonan pendirian.

Kolom Tipe Keterangan
id BIGINT PK
establishment_pp_id BIGINT FK → establishment_pp
kbli_id INT FK → kbli
status INT 1=Baru, 2=Dikonfirmasi, 3=Dihapus
created_at DATETIME
updated_at DATETIME
deleted_at DATETIME

establishment_pp_benefit

Fungsi: Pemilik manfaat (beneficial owner) untuk permohonan pendirian.

Kolom Tipe Keterangan
id BIGINT PK
establishment_pp_id BIGINT FK → establishment_pp
identities_id BIGINT FK → identity (jika terdaftar)
criteria_value VARCHAR Kriteria sebagai pemilik manfaat
benefit_name VARCHAR Nama pemilik manfaat
identity_type_id INT Tipe ID (KTP, Passport, dll)
identity_value VARCHAR Nomor ID
benefit_birthplace VARCHAR Tempat lahir
benefit_birthdate DATE Tanggal lahir
benefit_address VARCHAR Alamat
benefit_sub_district_id BIGINT FK → sub_district
benefit_rt VARCHAR
benefit_rw VARCHAR
benefit_nationality VARCHAR Kewarganegaraan
benefit_npwp VARCHAR NPWP pemilik manfaat
benefit_country_id BIGINT FK → country Negara (untuk WNA)
benefit_country_address VARCHAR Alamat luar negeri
benefit_relation VARCHAR Hubungan dengan pemilik
status INT 1=Baru, 2=Dikonfirmasi, 3=Dihapus
created_at DATETIME
updated_at DATETIME
deleted_at DATETIME

establishment_pp_history

Fungsi: Snapshot dari establishment_pp setiap kali ada perubahan status.

Kolom Tipe Keterangan
id BIGINT PK
establishment_pp_id BIGINT FK → establishment_pp
inserted_at DATETIME Waktu snapshot
(semua kolom dari establishment_pp) Disalin verbatim

Group C — Perubahan (modification_pp)

Alur: Pemilik submit perubahan → baris masuk modification_pp (status 1) → pemilik baru approve (jika ganti pemilik) → konfirmasi → pp_master diupdate, history disimpan.

modification_pp

Fungsi: Permohonan perubahan data PP (nama, email, alamat, modal, KBLI, pemilik, atau ganti pemilik).

Semua kolom sama dengan establishment_pp, ditambah:

Kolom Tipe Keterangan
pp_master_id BIGINT FK → pp_master PP mana yang diubah
section_value_json JSON Array bagian yang diubah: 1=Nama, 2=Email, 3=Alamat, 4=Modal, 5=KBLI, 6=Data Pemilik, 7=Ganti Pemilik
identities_id BIGINT FK → identity Pemilik saat ini (sebelum perubahan)
next_identities_id BIGINT FK → identity Pemilik baru (untuk section 7)
prev_identities_id BIGINT FK → identity Untuk audit
is_approved INT 0/1 — apakah pemilik baru sudah approve
approved_at DATETIME
status INT 1=Menunggu konfirmasi, 2=Dikonfirmasi, 3=Dihapus, 7=Ditolak

modification_pp_owner

Fungsi: Pemilik dalam konteks permohonan perubahan.

Kolom Tipe Keterangan
id BIGINT PK
modificationt_pp_id BIGINT FK → modification_pp ⚠️ Ada typo "modificationt" di codebase (field: modificationtPpId)
identities_id BIGINT FK → identity Pemilik saat ini
next_identities_id BIGINT FK → identity Pemilik baru (section 7)
prev_identities_id BIGINT FK → identity Pemilik sebelumnya
owner_value_json JSON Snapshot data pemilik saat ini
next_owner_value_json JSON Snapshot data pemilik baru
prev_owner_value_json JSON Snapshot data pemilik sebelumnya
status INT
created_at DATETIME
updated_at DATETIME
deleted_at DATETIME

modification_pp_activities

Sama dengan establishment_pp_activities. FK: modificationt_pp_id (typo sama).

modification_pp_benefit

Sama dengan establishment_pp_benefit. FK: modificationt_pp_id (typo sama).

modification_pp_history

Snapshot modification_pp per perubahan status. Tambahan kolom pp_master_id.

modification_pp_pt

Fungsi: Menghubungkan permohonan perubahan PP dengan PT yang dimiliki pemilik yang sama (untuk validasi ganti pemilik saat pemilik masih punya PT).

Kolom Tipe Keterangan
id BIGINT PK AUTO_INCREMENT
perseroan_name VARCHAR(500) Nama PT terkait
sk_number VARCHAR(100) Nomor SK PT
modification_pp_id BIGINT FK → modification_pp CASCADE DELETE
pp_master_id BIGINT FK → pp_master CASCADE DELETE
confirmation_at DATETIME Waktu konfirmasi
deleted_at DATETIME Default 9999-12-31 23:59:59
updated_at DATETIME
created_at DATETIME

Group D — Pembubaran (dispersal_pp)

Alur: Pemilik ajukan pembubaran → dispersal_pp (status 1) → dikonfirmasi → status jadi 5, pp_master diblokir / diarsipkan.

dispersal_pp

Semua kolom dari establishment_pp, ditambah:

Kolom Tipe Keterangan
pp_master_id BIGINT FK → pp_master PP yang dibubarkan
dispersal_reason_id BIGINT FK → dispersal_reason Alasan pembubaran
is_blocked INT Flag blokir
blocked_at DATETIME
status INT 1=Proses, 5=Selesai dibubarkan

dispersal_pp_owner / dispersal_pp_activities / dispersal_pp_benefit

Struktur sama dengan padanan Establishment. FK: dispersal_pp_id.

dispersal_pp_history

Snapshot dispersal per status change. Tambahan kolom dispersal_reason_id.

dispersal_reason

Fungsi: Daftar alasan pembubaran PP.

Kolom Tipe Keterangan
id INT PK
reason_order INT Urutan tampil
reason_description VARCHAR Teks alasan
status INT

Group E — Koreksi (correction_pp)

Fungsi: Koreksi kesalahan data entry (bukan perubahan resmi). Hanya admin yang bisa lakukan koreksi.

correction_pp

Kolom inti sama dengan establishment_pp.

correction_pp_owner

FK: correction_pp_id.

correction_pp_activities

FK: correction_pp_id.

correction_pp_previous

Fungsi: Menyimpan data sebelum koreksi dilakukan (audit trail).
FK: correction_pp_id.


Group F — Identitas & User (shared dengan Apostille)

identity

Fungsi: Akun pengguna sistem. Digunakan oleh PP (sebagai pemilik perseroan) dan Apostille (sebagai pemohon).

Kolom Tipe Keterangan
id BIGINT PK
full_name VARCHAR Nama lengkap
phone VARCHAR Nomor HP
address VARCHAR Alamat
address_rt VARCHAR RT
address_rw VARCHAR RW
sub_district_id BIGINT FK → sub_district
postalcode VARCHAR
birthplace VARCHAR Tempat lahir
birthdate DATE Tanggal lahir
npwp VARCHAR NPWP pribadi
position_id BIGINT FK → position Jabatan
job VARCHAR Pekerjaan
password_hash VARCHAR Hash password
status INT
created_at DATETIME
updated_at DATETIME
deleted_at DATETIME

identity_nik

Fungsi: Data NIK/KTP per identity.

Kolom Tipe Keterangan
id BIGINT PK
identities_id BIGINT FK → identity
nik VARCHAR Nomor Induk Kependudukan
(kolom lain)

identity_email

Fungsi: Email per identity.

Kolom Tipe Keterangan
id BIGINT PK
identities_id BIGINT FK → identity
email VARCHAR
(kolom lain)

identity_group

Fungsi: Mapping identity ke group (many-to-many).

Kolom Tipe Keterangan
identities_id BIGINT FK → identity
group_id BIGINT FK → group

group

Fungsi: Role/grup pengguna (admin, petugas, publik, dll).

Kolom Tipe Keterangan
id INT PK
name VARCHAR Nama grup
status INT ≠3 = aktif

access_menu

Fungsi: Hak akses menu per group.

Kolom Tipe Keterangan
groups_id INT FK → group
action_menu_id INT FK → menu

Group G — Master / Referensi

kbli

Fungsi: Klasifikasi Baku Lapangan Usaha Indonesia — referensi kegiatan usaha.

Kolom Tipe Keterangan
id INT PK
code VARCHAR Kode KBLI (5 digit)
title VARCHAR Nama kegiatan
description TEXT Deskripsi
(mungkin ada kolom lain)

transaction_type

Fungsi: Tipe-tipe transaksi PP.

id name display_name
1 Pendirian Pendirian
2 Perubahan Umum Perubahan Umum
3 Perubahan Perubahan
4 Pembubaran Pembubaran
5 Koreksi Koreksi
6 (tidak diketahui)
7 (tidak diketahui)
8 Perubahan Status Perubahan Status

country

Kolom Tipe Keterangan
id INT PK
name VARCHAR Nama negara
code VARCHAR Kode ISO

sub_district / district / city / province

Hierarki wilayah administratif Indonesia.

province (provinsi)
  └─ city (kota/kabupaten)
       └─ district (kecamatan)
            └─ sub_district (kelurahan)

Setiap tabel punya: id, name, code, FK ke level di atasnya, status, deleted_at.


Group H — Fitur Aplikasi

announcement_transaction

Fungsi: Pengumuman publik yang diterbitkan setiap transaksi PP dikonfirmasi.

Kolom Tipe Keterangan
id BIGINT PK
pp_master_id BIGINT FK → pp_master
transaction_type_id INT
transaction_at DATETIME Waktu transaksi
perseroan_name VARCHAR
perseroan_sub_district_id BIGINT
certificate_number VARCHAR
status INT 2 = aktif/terpublikasi
created_at DATETIME
updated_at DATETIME

finance

Fungsi: Laporan keuangan tahunan PP. Hanya boleh dilaporkan 1 kali per periode.

Kolom utama: id, pp_master_id, period, status, created_at, updated_at.

finance_pp_transaction_number_count

Counter sequence untuk nomor transaksi laporan keuangan.

notification

Notifikasi in-app untuk pengguna.

pp_blocked / pp_blocked_history

Rekaman PP yang diblokir beserta history-nya.

pp_profile_leads / pp_profile_state

Tracking lead dan status profil PP.

announcement_news

Berita/pengumuman konten statis portal.

badwords / blacklist / whitelist

Daftar kata terlarang dan whitelist/blacklist nama perseroan.

benefit_criteria

Master kriteria pemilik manfaat (>25% saham, kontrol, dll).

position

Master jabatan/posisi.

global_param

Parameter konfigurasi global aplikasi.

tracking_download_counter / tracking_download_detail

Tracking unduhan sertifikat dan dokumen.


Status Codes & Transaction Types PP

Status pp_master

Nilai Makna
1 Aktif / Belum dikonfirmasi (dalam proses)
2 Dikonfirmasi / Berlaku
3 Dihapus (soft delete)

Status establishment_pp / modification_pp

Nilai Makna
1 Menunggu konfirmasi
2 Dikonfirmasi
3 Dihapus / batal
7 Ditolak (khusus modifikasi)

Status dispersal_pp

Nilai Makna
1 Sedang diproses
5 Selesai dibubarkan

2. Apostille / Legalisasi — Database v1_appapos

Stack: MariaDB, TypeORM 0.2.32, Node.js
Services: apostille-service (portal + verifikasi), user-service (manajemen pengguna), ap-job (background jobs)

Diagram Relasi Apostille

erDiagram identity ||--o{ customer_identities : "identities_id" customer_identities ||--o{ customer_documents : "customer_identities_id" customer_documents ||--o{ customer_document_details : "customer_documents_id" customer_documents ||--o{ customer_document_history : "customer_documents_id" customer_documents ||--o{ request_reprint_details : "via no_trx" customer_document_details ||--o{ request_reprint_details : "no_trx" customer_documents }o--|| regional_office : "place_of_publication_stickers" customer_documents }o--|| spesimen_position : "spesimen_position_id" customer_document_details }o--|| mr_signature_template : "mst_id" spesimen ||--o{ spesimen_position : "spesimen_id" spesimen_position }o--|| district : "district_id" regional_office }o--|| province : "province_id" document_type ||--o{ customer_documents : "???implicitly" identity ||--o{ identity_nik : "identities_id" identity ||--o{ identity_email : "identities_id" identity ||--o{ identity_group : "identities_id" identity_group }o--|| group : "group_id" group ||--o{ access_menu : "groups_id" country ||--o{ customer_identities : "country_of_destination" province ||--o{ city : "province_id" city ||--o{ district : "city_id" district ||--o{ sub_district : "district_id"

Group A — Permohonan Utama

customer_identities

Fungsi: Akun pemohon apostille/legalisasi. Satu identity bisa punya banyak customer_identities untuk tipe permohonan berbeda.

Kolom Tipe Keterangan
id INT PK AUTO_INCREMENT
identities_id INT FK → identity
application_type INT 1=Apostille, 2=Legalisasi
country_of_destination INT FK → country Negara tujuan dokumen
country_id INT FK → country Negara asal pemohon (WNA)
sub_district_id INT Kelurahan domisili
sub_district VARCHAR Nama kelurahan (denormalized)
district_id INT FK → district
(kolom lain) Data kependudukan pemohon

customer_documents

Fungsi: Satu baris = satu dokumen yang diajukan apostille/legalisasi. Ini adalah entitas utama yang diverifikasi petugas.

Kolom Tipe Keterangan
id INT PK AUTO_INCREMENT
customer_identities_id INT FK → customer_identities Pemohon
application_number VARCHAR Nomor permohonan unik
document_name VARCHAR Nama dokumen
document_person_name VARCHAR Nama orang dalam dokumen
document_number VARCHAR Nomor dokumen
document_date DATE Tanggal dokumen
is_electronic INT 1=Elektronik, 2=Non-elektronik
application_type INT 1=Apostille, 2=Legalisasi
spesimen_position VARCHAR Jabatan pejabat yang tanda tangan dokumen
spesimen_officer_name VARCHAR Nama pejabat yang tanda tangan
spesimen_position_id INT FK → spesimen_position
institutions VARCHAR Institusi penerbit dokumen
place_of_publication_stickers INT FK → regional_office Kanwil tempat stiker dicetak
verification_step INT Step verifikasi saat ini (2 atau 3)
status INT Lihat status di bawah
created_at DATETIME
created_by INT FK → identity
updated_at DATETIME
updated_by INT FK → identity
deleted_at DATETIME Soft delete
deleted_by INT FK → identity

customer_document_details

Fungsi: Detail pembayaran, nomor legalisasi/apostille, dan status cetak stiker per dokumen.

Kolom Tipe Keterangan
id INT PK AUTO_INCREMENT
customer_documents_id INT FK → customer_documents
no_trx VARCHAR Nomor transaksi (dipakai sebagai FK di reprint)
no_voucher VARCHAR Nomor voucher PNBP
no_legalization VARCHAR Nomor apostille/legalisasi resmi (format: AHU-XXXX untuk Apostille)
is_paid INT 0=Belum bayar, 1=Sudah bayar
pay_date DATETIME Tanggal pembayaran
sticker_print_at DATETIME Tanggal cetak stiker
print_status INT 0=Belum cetak, 1=Sudah cetak
reprint_count INT Counter cetak ulang (default 0)
sticker_print VARCHAR Binary/path file stiker
path_qr_code VARCHAR Path file QR code
mst_id INT FK → mr_signature_template Template tanda tangan yang digunakan

customer_document_history

Fungsi: Log setiap aksi verifikasi (approve/reject/reverify) oleh petugas.

Kolom Tipe Keterangan
id INT PK AUTO_INCREMENT
customer_documents_id INT FK → customer_documents
status INT 1=Disetujui, 2=Ditolak, 3=Reverifikasi
step INT Step verifikasi: 1, 2, atau 3
notes TEXT Catatan petugas
verified_at DATETIME Waktu verifikasi
verified_by INT FK → identity Petugas yang memverifikasi

request_reprint_details

Fungsi: Permohonan cetak ulang stiker apostille yang sudah pernah dicetak.

Kolom Tipe Keterangan
id INT PK AUTO_INCREMENT
no_trx VARCHAR FK → customer_document_details.no_trx Dokumen yang diminta cetak ulang
reasons TEXT Alasan cetak ulang
status INT 1 = default/aktif
created_at DATETIME
created_by INT FK → identity

Group B — Spesimen Pejabat

spesimen

Fungsi: Data pejabat (notaris, kepala dinas, dll) yang tanda tangannya bisa dilegalisasi/diappostille.

Kolom Tipe Keterangan
id INT PK AUTO_INCREMENT
officer_name VARCHAR Nama pejabat
description TEXT Deskripsi / keterangan
created_at DATETIME
created_by INT FK → identity
updated_by INT FK → identity
deleted_at DATETIME
deleted_by INT FK → identity

spesimen_position

Fungsi: Riwayat jabatan seorang pejabat (spesimen). Satu pejabat bisa punya banyak posisi di periode berbeda.

Kolom Tipe Keterangan
id INT PK AUTO_INCREMENT
spesimen_id INT FK → spesimen
position VARCHAR Jabatan (misal: "Notaris")
nip VARCHAR NIP
address VARCHAR Alamat kantor
start_year_of_officiate INT Tahun mulai menjabat
finish_year_of_officiate INT Tahun selesai menjabat
spesimen_file VARCHAR Path file contoh tanda tangan
institutions VARCHAR Nama institusi
district_id INT FK → district Wilayah kerja
status INT 1=Aktif, 3=Dihapus
created_at DATETIME
deleted_at DATETIME

spesimen_validity

Fungsi: Rentang periode validitas spesimen (untuk cek apakah tanda tangan masih berlaku pada tanggal dokumen).

Kolom Tipe Keterangan
(tidak diketahui lengkap)
position VARCHAR Jabatan
officer_name VARCHAR Nama pejabat

mr_signature_template

Fungsi: Template tanda tangan pejabat AHU yang akan dicantumkan di sertifikat apostille/legalisasi.

Kolom Tipe Keterangan
id INT PK AUTO_INCREMENT
application_type INT 1=Apostille, 2=Legalisasi
officer_name VARCHAR Nama pejabat AHU
position VARCHAR Jabatan (Indonesia)
position_id VARCHAR Kode posisi
position_en VARCHAR Jabatan (Inggris)
nip VARCHAR NIP
signature_file VARCHAR Path file tanda tangan digital
status INT 0=Nonaktif/dihapus, 1=Aktif
is_plt INT 0=Definitif, 1=PLT (Pelaksana Tugas)
start_at DATETIME Awal masa berlaku
end_at DATETIME Akhir masa berlaku

Group C — Master Data

document_type

Fungsi: Jenis-jenis dokumen yang bisa diajukan apostille/legalisasi.

Kolom Tipe Keterangan
id INT PK
name VARCHAR Nama internal
display_name VARCHAR Nama tampil
order INT Urutan tampil
status INT 1=Aktif
is_apostille INT 1=bisa apostille, 0=hanya legalisasi

regional_office

Fungsi: Kantor Wilayah AHU tempat stiker apostille/legalisasi dicetak.

Kolom Tipe Keterangan
id INT PK AUTO_INCREMENT
name VARCHAR Nama kantor wilayah
city_name VARCHAR Nama kota
province_id INT FK → province
application_type INT 1=Apostille, 2=Legalisasi
position INT Urutan tampil
status INT 0=Nonaktif, 1=Aktif
created_at DATETIME
created_by INT FK → identity
updated_at DATETIME
updated_by INT FK → identity
deleted_at DATETIME
deleted_by INT FK → identity

country

Fungsi: Master negara (sama struktur dengan PP).

Kolom Tipe Keterangan
id INT PK
name VARCHAR Nama negara
code VARCHAR Kode ISO
is_apostille INT 1=negara tujuan apostille, 0=tidak
latitude VARCHAR
longitude VARCHAR
phone_number_prefix VARCHAR Kode telepon internasional
created_at DATETIME
created_by INT
updated_at DATETIME
updated_by INT

province / city / district / sub_district

Sama dengan PP — hierarki wilayah administratif Indonesia.


Group D — User & Akses

Tabel identity, identity_nik, identity_email, identity_group, group, access_menu — struktur sama dengan PP. Kemungkinan besar database terpisah tapi skema identik.


Group E — Konten & Config

announcement_news

Berita dan pengumuman portal Apostille.

faq

Daftar FAQ tampil di portal.

global_param

Parameter konfigurasi global (batas upload, dll).

data_type_audittrail

Tipe-tipe event audit trail.


Status Codes Apostille

Status customer_documents

Nilai Makna
1 Diajukan (submitted), menunggu verifikasi
2 Sedang diverifikasi
3 Ditolak
4 Selesai / Disetujui

verification_step

Nilai Makna
2 Step verifikasi pertama (petugas level 1)
3 Step verifikasi kedua (petugas level 2 / supervisor)

Status customer_document_history

Nilai Makna
1 Disetujui
2 Ditolak
3 Dikembalikan untuk reverifikasi

application_type

Nilai Makna
1 Apostille
2 Legalisasi

Catatan Penting untuk Integrasi OCR

PP

  • Field kritis untuk OCR: perseroan_name, perseroan_capital, perseroan_npwp, perseroan_address, perseroan_sub_district_id, kbli_value_json
  • JSON columns tidak ternormalisasi: owner_value_json, benefit_value_json, kbli_value_json menyimpan snapshot — bukan FK langsung. Untuk audit kita cukup baca dari JSON ini tanpa join ke tabel lain.
  • Nomor transaksi: Format 41{YY}{MM}{DD}{province_code}02{NNNNN} — dibangun dari area + sequence counter.
  • Nomor sertifikat Pendirian: AHU-XXXXXX.AH.01.30.Tahun YYYY; Perubahan: AHU-XXXXXX.AH.01.31.Tahun YYYY

Apostille

  • Field kritis untuk OCR: document_name, document_person_name, document_number, document_date, spesimen_position, spesimen_officer_name, institutions
  • Verifikasi spesimen: Sistem mencocokkan tanda tangan pejabat di dokumen dengan database spesimen_positionspesimen_validity untuk memastikan pejabat memang berwenang pada tanggal dokumen tersebut.
  • Nomor apostille: Format mengandung prefix AHU, diisi di customer_document_details.no_legalization setelah verifikasi selesai.