Lewati ke konten

Keunggulan Booku: Buku Pengawasan Hutang PPh Pasal 25

Tier 3 — keunggulan-keunggulan Booku yang muncul saat user memakai menu Buku Pengawasan Hutang PPh Pasal 25 (angsuran PPh badan bulanan ke DJP).

📘 Deskripsi user-friendly: deskripsi/hutang-pph-pasal-25.md


Deskripsi Singkat Menu

PPh Pasal 25 adalah angsuran PPh Badan bulanan yang wajib dibayar perusahaan ke DJP setiap masa pajak (Januari–Desember). Halaman ini mencatat tagihan terutang, pembayaran via Bukti Pengeluaran, pelaporan SPT, dan tagihan Ketetapan Pajak (SKP/STP) — semuanya dalam satu layar terpadu.

Berbeda dengan jenis PPh lain (21/23/26/4(2)) yang tagihannya muncul dari invoice supplier dan butuh detail DPP/Kode Setoran, PPh 25 sangat sederhana: 1 bulan = 1 record, lawan transaksi selalu DJP, hanya IDR, tanpa DPP/NPWP/Faktur Pajak. Booku memanfaatkan kesederhanaan ini untuk mengotomasi sebanyak mungkin dan menghilangkan friksi UX.


Daftar Keunggulan di Menu Ini

#KeunggulanTier 2 Terkait
1Auto-Deteksi Tambah/Edit via Pilih Masa Pajak (tidak perlu pilih mode manual)#08, #10
2Jurnal Otomatis Saat Simpan Hutang (D: PPh25 Dibayar Dimuka / K: Hutang PPh25)#02, #11
3Tracking Pembayaran Lintas Tahun Otomatis (cross-year payment)#02
4Bayar 1-Klik dari Menu ⋮ — Form Bukti Pengeluaran Preset DJP#02, #08
5Lapor SPT Terintegrasi dengan Auto-Tag TW/TL (Tepat Waktu / Terlambat)#04, #02
6Baris Ketetapan Pajak Agregat Otomatis (sum Pokok + pembayaran BPKP)#02
7UI Cerdas Mode LAMPAU vs NORMAL (sembunyi jurnal di LAMPAU, lock tahun di NORMAL)#10, #08

Detail per Keunggulan

1. Auto-Deteksi Tambah/Edit via Pilih Masa Pajak

Apa yang dirasakan user: Saat klik Tambah, modal terbuka dengan dropdown Masa Pajak kosong. Begitu user pilih bulan (misal “Maret”), form langsung tahu apakah bulan itu sudah ada record. Kalau sudah, modal otomatis switch ke mode Edit, judul berubah jadi “Edit Hutang PPh Pasal 25”, dan Jumlah Terutang + Keterangan langsung ter-isi dari data existing. Kalau belum ada, mode Tambah, form kosong.

Mengapa penting:

  • 1 bulan masa pajak = max 1 record (konstraint bisnis PPh 25). User sering tidak ingat bulan mana yang sudah/belum input.
  • Tanpa auto-detect, user salah klik Tambah padahal seharusnya Edit → muncul error “sudah ada record untuk bulan ini” yang membingungkan.

Bagaimana Booku Melakukannya:

  • Frontend menerima items list 12 bulan dari parent → lookup lokal saat user ganti bulan (tidak perlu round-trip ke backend)
  • Title modal + endpoint submit (POST create vs PUT update) berubah otomatis berdasar mode internal
  • Mengikuti pattern Booku Lama (cmb_MasaPajak_SelectionChanged → IsiValueForm()) — pengalaman user yang sudah familiar tetap konsisten

→ Cross-link: #08 Simple for User, #10 UI Dinamis


2. Jurnal Otomatis Saat Simpan Hutang

Apa yang dirasakan user: Setelah klik Simpan, sistem tidak hanya menyimpan record hutang — tapi langsung membuat jurnal voucher dengan dua sisi (Debet: “PPh Pasal 25 Dibayar Dimuka”, Kredit: “Hutang PPh Pasal 25”). User bisa lihat jurnalnya via menu ⋮ → Lihat Jurnal.

Mengapa penting:

  • PPh 25 = aset (dibayar dimuka) sekaligus kewajiban (hutang ke DJP). Akuntan harus tahu cara split D/K-nya, dan COA yang benar.
  • Tanpa otomasi: user (yang biasanya bukan akuntan profesional) harus buka menu Jurnal Umum → input jurnal manual → resiko salah COA atau salah arah Debet/Kredit.

Bagaimana Booku Melakukannya:

  • Service backend HutangPPh25Service.CreateAsync panggil IJurnalBuilder dengan COA constants KodeTautanCOA_PPhPasal25DibayarDimuka + KodeTautanCOA_HutangPPhPasal25
  • Multi-table transaction: record hutang + lines jurnal disimpan dalam 1 SaveChangesAsync — atomic
  • Saat user edit: jurnal lama dihapus + jurnal baru di-regenerate (dengan NomorJV tetap)
  • LAMPAU mode: tidak ada jurnal (sesuai aturan akuntansi — tahun historis tidak punya mutasi jurnal di V2)

→ Cross-link: #02 Automatic Everything, #11 Jurnal Multiline


3. Tracking Pembayaran Lintas Tahun Otomatis

Apa yang dirasakan user: Buka halaman PPh 25, filter tahun 2025 padahal sekarang tahun buku aktif 2026. Kolom “Jumlah Bayar” tetap menampilkan total pembayaran — termasuk pembayaran yang dilakukan tahun 2026 untuk hutang tahun 2025. Tidak ada manipulasi manual.

Mengapa penting:

  • Skenario realistis: hutang PPh 25 bulan Desember 2025 dibayar di Januari 2026 (cair setelah tahun ditutup). Di sistem yang DB-nya per tahun buku, pembayaran 2026 ada di DB 2026, hutang ada di DB 2025.
  • Tanpa cross-year tracking: user lihat di filter 2025 sisa hutang masih utuh, di filter 2026 ada pembayaran tanpa tagihan → bingung & data tidak match.

Bagaimana Booku Melakukannya:

  • Service AggregatePembayaranLintasTahunAsync loop dari tahunPajak s/d tahunBuku, buka DB tiap tahun, aggregate pembayaran per NomorBPHP
  • Try-catch per iterasi → DB tahun yang belum ada (tenant baru) di-skip dengan warning, tidak crash
  • Filter di Bukti Pengeluaran: NomorBP LIKE "BPHP25-{tahun}-%" + KodeSetoran = "Non" + StatusInvoice = "Dibayar"

→ Cross-link: #02 Automatic Everything


4. Bayar 1-Klik dari Menu ⋮ — Form Preset DJP

Apa yang dirasakan user: Di tabel utama, klik kanan baris bulan yang punya tagihan → pilih Bayar → drawer detail terbuka, dan form Bukti Pengeluaran langsung muncul sudah ter-preset:

  • Kategori: Pembayaran Hutang
  • Peruntukan: Pembayaran Hutang Pajak
  • Lawan Transaksi: DJP
  • Nomor BP: BPHP25-{tahun}-{bulan}

User cukup pilih tanggal, sarana pembayaran (Bank/Cash), dan jumlah — selesai. Tidak perlu navigasi ke menu Bukti Pengeluaran terpisah, tidak perlu cari Lawan Transaksi DJP, tidak perlu ketik Nomor BP.

Mengapa penting:

  • Booku Lama: user harus klik baris → tombol Bayar → form terbuka satu-per-satu preset diisi otomatis (4 field). Di Booku V2 V1: user harus navigasi ke menu Bukti Pengeluaran → cari Peruntukan → pilih DJP → ketik Nomor BP → kembali ke PPh 25 untuk cek lunas. Friksi tinggi.
  • 1-klik dari menu ⋮ menyelesaikan ini dengan drawer auto-action pattern.

Bagaimana Booku Melakukannya:

  • Page set pendingDrawerAction='bayar' → drawer mount → fetch data → useEffect auto-trigger handleBayar() setelah data siap
  • useBuktiPengeluaranStore.openAddModal dengan preset object
  • Backend GetOutstandingHutangPajakAsync derive JenisPajak + KodeSetoran dari prefix NomorBP — form Bukti Pengeluaran langsung tahu ini tagihan PPh 25

→ Cross-link: #02 Automatic Everything, #08 Simple for User


5. Lapor SPT Terintegrasi dengan Auto-Tag TW/TL

Apa yang dirasakan user: Begitu sisa hutang 1 bulan = 0 (lunas), tombol Lapor di section “Lapor SPT” dalam drawer aktif. User klik → modal kecil: Tanggal Lapor + N/P (Nihil/Pembayaran). Simpan → langsung muncul tag TW (hijau) atau TL (oranye) di tabel utama menandakan apakah laporan tepat waktu atau terlambat.

Mengapa penting:

  • Deadline lapor SPT PPh 25 = akhir bulan setelah masa pajak (misal: masa pajak Maret → deadline 30 April). Telat → denda DJP.
  • Tanpa auto-tag: user harus hitung manual setiap bulan, “apakah saya lapor tepat waktu?”. Akuntan SP2DK readiness butuh ini terdokumentasi rapi.

Bagaimana Booku Melakukannya:

  • Backend HitungTWTL(tanggalLapor, bulan, np) — compute on-demand di service (tidak disimpan di DB → konsisten saat tanggal lapor di-edit)
  • Tag di kolom tabel utama: warna hijau (TW) vs oranye (TL) — instant visual
  • Form Lapor SPT pakai komponen shared LaporSPTModal (sama dengan modul PPN, PPh 23, dst.) — konsisten lintas jenis pajak

→ Cross-link: #04 Pajak Indonesia, #02 Automatic Everything


6. Baris Ketetapan Pajak Agregat Otomatis

Apa yang dirasakan user: Di tabel utama, setelah 12 baris bulan, muncul baris ke-13 dengan label “Ketetapan Pajak”. Baris ini ringkasan dari semua surat Ketetapan (SKP/STP) dari DJP untuk PPh 25 — Pokok Pajak total, Jumlah Bayar total (dari pembayaran ber-prefix BPKP), Sisa Hutang. Nilai-nilai ini juga ikut masuk ke TOTAL di footer.

Mengapa penting:

  • Ketetapan dari DJP (audit, koreksi, denda) adalah kewajiban tambahan di luar angsuran bulanan rutin. User perlu tahu total exposure pajak — bulanan + ketetapan.
  • Booku Lama menampilkan baris ini terpisah; user tidak perlu buka menu Ketetapan Pajak terpisah hanya untuk lihat total.

Bagaimana Booku Melakukannya:

  • Service BuildKetetapanPajakRowAsync query tbl_ketetapanpajak filter JenisPajak = “PPh Pasal 25” → SUM(Pokok_Pajak)
  • Cross-reference ke tbl_buktipengeluaran dengan NomorBP LIKE 'BPKP-%' untuk hitung pembayaran ketetapan
  • Return null saat tidak ada data → baris tidak di-render (tabel tetap bersih)

→ Cross-link: #02 Automatic Everything


7. UI Cerdas Mode LAMPAU vs NORMAL

Apa yang dirasakan user: Sama-sama halaman PPh 25, tampilannya berubah tergantung jenis tahun buku:

AspekLAMPAU (tahun historis)NORMAL (operasional)
Saldo Card”Saldo Akhir” (List real, COA ”—” defer)“Saldo (belum tersedia)” — semua ”—“
Tombol Lihat Jurnal di menu ⋮HiddenVisible
Form Input — Tahun dropdownEnabled (input historis multi-tahun)Locked ke tahun pajak filter
Tombol BayarTidak butuh validasi NomorJVWajib NomorJV > 0 (record sudah ada jurnal)

Mengapa penting:

  • Tahun LAMPAU = saat pertama setup Booku, user input data historis multi-tahun tanpa jurnal (saldo akhir di-input langsung). Tahun NORMAL = operasional regular dengan jurnal.
  • Tanpa UI cerdas: user di tahun LAMPAU bingung kenapa ada tombol Jurnal yang tidak relevan. User di tahun NORMAL bingung kenapa Tahun di-lock.

Bagaimana Booku Melakukannya:

  • Page baca JenisTahunBuku dari useAppStore() → conditional render
  • Backend bedakan algoritma: LAMPAU compute saldo akhir = total sisa, NORMAL defer saldo (menunggu Tutup Buku V2)
  • Tombol “Sesuaikan” sengaja tidak di-render karena value masih defer (NORMAL) atau memang tidak relevan (LAMPAU tidak ada jurnal AJP)

→ Cross-link: #10 UI Dinamis, #08 Simple for User


Hal-hal yang TIDAK Termasuk Keunggulan Menonjol di Menu Ini

Beberapa fitur ada tapi bukan “selling point” yang membedakan dari kompetitor — fitur standar saja:

  • CRUD record (Input/Edit/Hapus) — standar
  • Filter Tahun Pajak — standar
  • Export Excel — standar
  • Tombol Lihat Jurnal (link ke voucher) — sudah covered di point #11 jurnal-multiline

Terakhir diperbarui: 03-05-2026