# BLUEPRINT & RENCANA IMPLEMENTASI PPH 21 UU HPP (SKEMA BERJENJANG) - MODUL BIAYA

Dokumen ini mencatat seluruh hasil diskusi, aturan bisnis, formula kalkulasi, serta rencana implementasi teknis untuk fitur **PPh 21 UU HPP Skema Berjenjang** pada modul **Biaya / Cashback Penjualan**.

---

## 1. Latar Belakang & Masalah Utama

1. **Penyebab Masalah Awal (Gambar 2 Kosong):**
   - Opsi *KOMISI PENJUALAN (PPh 21, Omset dibawah 50M, mendapat potongan 50%, menurut UU HPP)* (ID 78) dan *KOMISI PENJUALAN (PPh 21, Omset diatas 50M tidak mendapat fasilitas UU HPP)* (ID 79) tidak menampilkan data/banner apapun pada panel kanan saat dipilih.
   - **Penyebab:** ID 78 dan 79 belum terdaftar di dalam array pemetaan `autoSelectPPh['tipe_biaya']` pada file `coTransaksiUi.php`.
   - **Solusi Pemetaan:** Mendaftarkan ID 78 dan 79 ke `coTransaksiUi.php` secara terisolasi tanpa mengganggu ID eksisting (72, 73, 74, 77).

2. **Pengaturan Pajak PPh 21 Berjenjang UU HPP:**
   - Mengimplementasikan kalkulasi PPh 21 berdasarkan skema berjenjang/progresif UU HPP.

---

## 2. Ketentuan & Rumus Perhitungan Pajak

### A. Definisi Kolom Transaksi
1. **`BIAYA CASHBACK` (Nilai Bruto / Pre-Tax):**
   - Nilai komisi/cashback sebelum dipotong pajak (diinput oleh pengguna).
   - Menjadi acuan dasar `Bruto Layer` untuk perhitungan progresif PPh 21 UU HPP.
2. **`JUMLAH DISERAHKAN KE PENERIMA` (Nilai Neto / Post-Tax):**
   - Nilai bersih yang diterima oleh penerima komisi.
   - **Opsi Selain 78 & 79:** Nilai sama dengan biaya cashback (atau diisi manual).
   - **Khusus Opsi 78 & 79:** Nilai terhitung secara otomatis:
     $$\text{Jumlah Diserahkan ke Penerima} = \text{Biaya Cashback (Bruto)} - \text{Nominal PPh 21}$$

### B. Prinsip Kalkulasi Total Cart
- **Kalkulasi berjenjang dilakukan dari TOTAL CART** (gabungan seluruh item cashback di keranjang belanja, bukan per-item individual).
- Contoh: Item 1 = Rp 60.000.000 + Item 2 = Rp 20.000.000 $\rightarrow$ **Total Bruto Cart = Rp 80.000.000**.

### C. Skema Layering Tarif Progresif

#### 1. Opsi ID 78 (Omset < 50M - Dapat Fasilitas Diskon 50% UU HPP)
Faktor DPP = $50\%$ (Tarif Efektif = $50\% \times \text{Tarif Layer}$):
- **Layer 1 (0 s.d Rp 60.000.000):** $50\% \times 5\% = \mathbf{2,5\%}$
- **Layer 2 (> Rp 60.000.000 s.d Rp 250.000.000):** $50\% \times 15\% = \mathbf{7,5\%}$
- **Layer 3 (> Rp 250.000.000 s.d Rp 500.000.000):** $50\% \times 25\% = \mathbf{12,5\%}$
- **Layer 4 (> Rp 500.000.000 s.d Rp 5 Miliar):** $50\% \times 30\% = \mathbf{15\%}$
- **Layer 5 (> Rp 5 Miliar):** $50\% \times 35\% = \mathbf{17,5\%}$

*Simulasi Total Cart Rp 80.000.000:*
- Layer 1 (60 Juta): $60.000.000 \times 2,5\% = \text{Rp 1.500.000}$
- Layer 2 (20 Juta): $20.000.000 \times 7,5\% = \text{Rp 1.500.000}$
- **Total PPh 21 Cart:** **Rp 3.000.000** *(Tarif Efektif Total = 3,75%)*
- **Jumlah Diserahkan:** $\text{Rp 80.000.000} - \text{Rp 3.000.000} = \mathbf{\text{Rp 77.000.000}}$

#### 2. Opsi ID 79 (Omset > 50M - Tanpa Fasilitas Diskon 50% UU HPP)
Faktor DPP = $100\%$ (Tarif Penuh):
- **Layer 1 (0 s.d Rp 60.000.000):** $\mathbf{5\%}$
- **Layer 2 (> Rp 60.000.000 s.d Rp 250.000.000):** $\mathbf{15\%}$
- **Layer 3 (> Rp 250.000.000 s.d Rp 500.000.000):** $\mathbf{25\%}$
- **Layer 4 (> Rp 500.000.000 s.d Rp 5 Miliar):** $\mathbf{30\%}$
- **Layer 5 (> Rp 5 Miliar):** $\mathbf{35\%}$

*Simulasi Total Cart Rp 80.000.000:*
- Layer 1 (60 Juta): $60.000.000 \times 5\% = \text{Rp 3.000.000}$
- Layer 2 (20 Juta): $20.000.000 \times 15\% = \text{Rp 3.000.000}$
- **Total PPh 21 Cart:** **Rp 6.000.000** *(Tarif Efektif Total = 7,5%)*
- **Jumlah Diserahkan:** $\text{Rp 80.000.000} - \text{Rp 6.000.000} = \mathbf{\text{Rp 74.000.000}}$

---

## 3. Desain Antarmuka (UI / Interface) & Ketentuan Hidden

1. **Lokasi Tampilan Rincian Berjenjang:**
   - Ditempatkan pada **area kosong kotak merah** (sebelah kiri ringkasan total `BIAYA CASHBACK`, `PPH 21`, `JUMLAH DISERAHKAN KE PENERIMA`).
   - Ukuran font `13px`, spasi renggang (`6px 10px`), header kartu biru (`#007bff`), dan angka nominal PPh berwarna merah kontras (`#d9534f`).

2. **Aturan Tersembunyi (Hidden Requirement):**
   - Tabel Rincian PPh 21 Progresif **hanya aktif dan tampil untuk ID 78 dan 79**.
   - Untuk opsi selain 78 & 79 (seperti ID 72, 73, 74, 77, dll.), area rincian tersebut **100% HIDDEN (tidak tampil)**, dan alur formulir berjalan persis seperti semula.

---

## 4. Komponen & Struktur File Teknis

1. **[coTransaksiUi.php](file:///z:/everest_6agus/application/modules/biaya/config/coTransaksiUi.php):**
   - Menyediakan pemetaan array `autoSelectPPh['tipe_biaya']` untuk ID `78` dan `79`.
2. **[he_pph21_progresif_helper.php](file:///z:/everest_6agus/application/helpers/he_pph21_progresif_helper.php):**
   - Fungsi `hitung_pph21_progresif_uuhpp($bruto, $has_fasilitas)` yang menghitung layer progresif berdasarkan nilai bruto total cart.
3. **[_shoppingCart.php](file:///z:/everest_6agus/application/modules/biaya/controllers/_shoppingCart.php):**
   - Mengakumulasi total bruto cashback cart.
   - Memanggil helper `he_pph21_progresif` untuk ID 78 ($has\_fasilitas = true$) & ID 79 ($has\_fasilitas = false$).
   - Menyusun variabel HTML `$html_rincian_pph21_progresif` dan memperbarui nilai kalkulasi PPh 21 serta Jumlah Diserahkan pada session cart.
4. **[shoppingCart.php](file:///z:/everest_6agus/application/modules/biaya/views/shoppingCart.php):**
   - Menampilkan sel tabel rincian berjenjang pada area kiri ringkasan total hanya jika `$html_rincian_pph21_progresif` tidak kosong.
