# 📘 Panduan Modul: Taxes (Pajak)

## 1. Kode Transaksi & Tipe (`jenisTr`)
Modul ini menangani transaksi perpajakan, faktur pajak masukan/keluaran, dan deklarasi PIB (Pemberitahuan Impor Barang):
- **`681`**: Request Object Pajak PIB (Pajak Masukan Impor)
- **`5681`**: Request Object Pajak Lokal (Pajak Masukan Lokal)
- **`110`**: Transaksi PPN Masukan / Keluaran (Faktur Pajak)
- **`111`**: Transaksi PPN Masukan Pengganti

---

## 2. Aliran Finansial & Jurnal Akuntansi
Menghubungkan nilai DPP (Dasar Pengenaan Pajak) dan PPN (Pajak Pertambahan Nilai) dari invoice penjualan/pembelian ke akun buku besar PPN.

### Jurnal Akuntansi Terkait (COA) pada PPN (`110`):
- **`2030070`**: PPN Keluaran (Sudah Ada Faktur) - Kredit saat penjualan.
- **`1010060010`**: Piutang Pajak Antar Cabang (jika transaksi lintas cabang).
- **`2030060`**: PPN Keluaran Cabang (Debet/Kredit penyesuaian cabang).

---

## 3. Aturan Bisnis & Integrasi Modul
- **Gunggungan Mode**: Mendukung penggabungan beberapa faktur pajak e-Faktur jika bendera `gunggungan_mode` aktif.
- **Sync Pajak Bendahara**: Menggunakan post-processor `SyncPpnBendahara` untuk mengaitkan nomer e-Faktur dengan transaksi kas/bank pelunasan dari bendahara instansi pemerintah.
- **Tidak Mengubah Stok**: Modul pajak murni bekerja pada level nilai keuangan (finansial) dan penomoran e-Faktur resmi Dirjen Pajak, sehingga **tidak memodifikasi** stock locker.

---

## 🛠️ Lampiran Teknis (Hasil Audit Codebase)

### Berkas Konfigurasi Utama:
- `coTransaksiCore.php`

### Kode Transaksi (`jenisTr`) Terdaftar:
- **`110`**
- **`111`**
- **`1155`**
- **`116`**
- **`117`**
- **`118`**
- **`1483`**
- **`5681`**
- **`5683`**
- **`681`**

### Komponen Bisnis (`components`) Terlibat:
- `Jurnal`
- `JurnalItem`
- `LockerStockPlafonBankMutasiMain`
- `LockerValue`
- `PaymentSourceFakturItems`
- `PaymentSrcItem`
- `Rekening`
- `RekeningItem`
- `RekeningKoranMinus`
- `RekeningPembantuAntarcabang`
- `RekeningPembantuAntarcabangItem`
- `RekeningPembantuBank`
- `RekeningPembantuCustomer`
- `RekeningPembantuCustomerItem`
- `RekeningPembantuKas`
- `RekeningPembantuPph`
- `RekeningPembantuRekeningKoranMain`
- `RekeningPembantuRelasiRekeningKoran`
- `RekeningPembantuSupplier`
- `SyncPpnBendahara`

---

## 4. Dev Journal / Riwayat Perbaikan

### [1 Juli 2026] Perbaikan Filter & UI Lock NPWP pada Antrean E-Faktur (Menu 110)
**Konteks Masalah:**
Transaksi pelanggan tanpa NPWP (Gunggungan) tidak muncul di panel atas (tab "Prepare E-Faktur") karena tersaring oleh *query* SQL, dan pengguna menginginkan agar data tetap tampil di kedua tab (E-Faktur dan Gunggungan) namun saling mengunci satu sama lain jika berada di tab yang salah.

**Solusi & Implementasi:**
1. **Pengahapusan Filter SQL (Backend):**
   Pada `Transaksi.php` *method* `viewUndoneItemsIndex2()`, filter `$tr->addFilter("customers_id in (select id from per_customers where ifnull(npwp,'')<>'')");` dikomentari agar *database* meloloskan semua transaksi (termasuk tanpa NPWP) ke tahapan *rendering* PHP.
2. **UI Lock E-Faktur (Backend):**
   Pada logika PHP (`viewUndoneItems()` dan `viewUndoneItemsIndex2()`), apabila data mendeteksi tidak adanya NPWP (masuk ke blok `else`), sistem mengosongkan tombol HTML aksi dan menggantinya dengan peringatan merah: `Hanya bisa diproses di TAB Prepare Gunggungan`.
3. **UI Lock Gunggungan (Frontend):**
   Pada `transaksi.php` (*views*), di dalam *rowCallback* *DataTables* untuk tab `pre_gunggungan`, transaksi yang *memiliki* NPWP akan dirender dengan peringatan merah: `Hanya bisa diproses di TAB Prepare E-Faktur` (menggantikan *checkbox* dinonaktifkan).
4. **UI Hardening - Penonaktifan Form Input (Backend):**
   Pada saat merender antrean data E-Faktur, *backend* kini menyisipkan atribut `disabled='disabled'` pada *field input* (seperti `dateFaktur` dan `eFaktur`) apabila data tersebut dikategorikan sebagai Gunggungan (tanpa NPWP).
   Selain itu, *class* `bg-lime` akan otomatis dihapus jika *input* berstatus *disabled* agar wujud *form* benar-benar terlihat pasif/redup dan tidak mengecoh mata.
5. **UI Hardening - Penandaan Warna Latar (Backend & Frontend):**
   - **E-Faktur Tab:** *Backend* mengirimkan instruksi warna latar melalui penambahan kunci `$tmp['row_style'] = "background-color:#dcdcdc;"` pada data *row*. *Frontend* merender warna tersebut secara otomatis di tag `<tr>`, sehingga peringatan teks merah lebih terbaca.
   - **Gunggungan Tab:** Di *frontend* (*DataTables rowCallback*), baris yang mengandung NPWP diberikan `background-color: #dcdcdc` menggunakan *jQuery* dan menghapus efek *opacity* bawaan, agar peringatan merah tidak terlihat transparan.

### [1 Juli 2026] Riwayat Transaksi Dashboard Paging & Notification
**Konteks Masalah:**
Panel "Riwayat transaksi" pada halaman utama (dashboard) `Transaksi/index` modul Taxes secara bawaan hanya menampilkan 10 transaksi terakhir (dibatasi limit). Pengguna mengeluhkan hadirnya tombol paginasi (Next/Prev) dari DataTables yang tidak relevan serta perlunya notifikasi visual untuk mengarahkan pengguna ke halaman seluruh histori.

**Solusi & Implementasi:**
1. **Deteksi Parameter Limit (Backend/Views):**
   Pada `history.php` (*views*) di dalam mode `showData`, sistem kini memeriksa keberadaan parameter `$_GET['limit']` yang menandakan bahwa view ini sedang dimuat untuk mode "Riwayat transaksi" yang dibatasi (dashboard).
2. **Penghapusan Paginasi DataTables:**
   Apabila parameter `limit` terdeteksi, konfigurasi `dom` untuk instansiasi DataTables pada `#data_history_$jenisTr` diubah menjadi `"t"`. Perubahan ini hanya merender isi tabel dan menghilangkan fitur kontrol yang tidak relevan (seperti Pagination `p`, Filter `f`, dan Information `i`).
3. **Injeksi Desain Notifikasi & Tombol Full History (Prominent):**
   Di bawah tabel riwayat pada mode `showData`, disisipkan sebuah blok **Callout** (`<div class='callout callout-warning'>`) bergaya sangat mencolok dengan latar kuning solid, garis batas tebal (`border: 2px solid #c87f0a`), serta teks keterangan berukuran lebih besar (`font-size:16px`).
   Untuk tombol menuju *Full History*, ukurannya diperbesar menjadi `<button class='btn btn-lg'>` ditambah dengan bayangan (*box-shadow*) serta *padding* lebar agar lebih memancing *user* untuk mengkliknya. (Catatan: Penyesuaian keliru yang sebelumnya dilakukan di blok `viewStatus` dan `transaksi.php` telah di-*rollback*).
