# 📋 Rencana Implementasi: Tool Mandiri Audit & Verifikasi Klaim Diskon Supplier
*(Zero-Touch Production Architecture)*

---

## 1. Latar Belakang & Tujuan
Pada transaksi jenis **3333** (**REALISASI KLAIM DISKON KE SUPPLIER**) di modul `kompensasiharga`, halaman operasional saat ini (`viewKlaimSupplierIndex`) menyajikan daftar nota penerimaan pembelian (GRN/467) yang memiliki sisa diskon pembelian ke supplier.

Untuk memastikan bahwa data yang tersaji **tepat, benar, dan valid** tanpa mengganggu halaman operasional yang sedang aktif digunakan oleh pengguna transaksi harian, akan dibuat **sebuah tool terpisah (mandiri)** dengan tampilan yang **100% identik**, namun diperkaya dengan fitur-fitur audit dan verifikasi data (*drill-down preview* dan *balance validator*).

---

## 2. Prinsip Arsitektur (Zero-Touch Production)
1. **Tidak Ada Modifikasi Berkas Asli (Zero Touch):**
   - Berkas controller `Transaksi.php`, view `transaksi.php`, dan seluruh berkas konfigurasi `coTransaksi*.php` **tidak akan diubah sama sekali**.
2. **Berkas Baru Khusus (Dedicated Files):**
   - Seluruh logika dan tampilan diletakkan pada 2 berkas baru yang mandiri.
3. **Sifat Operasi Aman (Read-Only):**
   - Tool ini hanya melakukan query pembacaan dan analisis data (*audit trail*), tidak melakukan penulisan mutasi keuangan atau penguncian stok baru.
4. **Kompatibilitas Penuh PHP 5.6 & CI 3.1.8:**
   - Menghindari operator PHP modern (`??`, short array `[]`, arrow function `fn()`).
   - Query selalu menggunakan Query Builder atau Parameterized Binding `$this->db->query($sql, $binds)` untuk keamanan data.

---

## 3. Rincian Berkas yang Akan Dibuat

### A. Berkas Controller Baru
* **Nama Berkas:** `application/modules/kompensasiharga/controllers/AuditKlaimSupplier.php`
* **Parent Class:** `Modul_Controller` (HMVC MX Controller)
* **Daftar Method:**
  1. `public function index($jenisTr = 3333)`
     - Validasi sesi login aktif (`auth/Login`).
     - Mengambil daftar supplier yang memiliki saldo sisa piutang diskon untuk dropdown filter *Pilih Supplier*.
     - Me-render berkas view `audit_klaim_supplier.php`.
  2. `public function dataAjax($jenisTr = 3333)`
     - Endpoint server-side DataTables (pencarian, paginasi, sorting).
     - Mengambil data transaksi GRN (`467`), saldo sisa debet dari `_rek_pembantu_subpiutangsuppliertrans_cache` (akun `1010020030`), nilai plafon awal dari `transaksi_registry`, dan nilai yang sudah diklaim dari mutasi/locker.
     - **Engine Rekonsiliasi Otomatis:**
       $$\text{Selisih} = |(\text{Sisa Diskon} + \text{Nilai Klaim}) - \text{Diskon Supplier}|$$
       - Jika $\text{Selisih} \le 5$ (toleransi pembulatan pecahan): disematkan status `VALID` (badge hijau).
       - Jika $\text{Selisih} > 5$: disematkan status `SELISIH` (badge merah) dengan keterangan nominal selisih.
  3. `public function previewGrnDetailAjax($grnId)`
     - Mengambil data rincian item barang, harga satuan beli, dan komposisi diskon faktur fisik nota GRN asli dari database.
     - Mengembalikan response HTML rapi untuk ditampilkan pada jendela modal pop-up.
  4. `public function previewMutasiKlaimAjax($grnId)`
     - Mengambil riwayat pemotongan klaim dari tabel `__rek_pembantu_subpiutangsuppliertrans__1010020030` dan referensi transaksi `3333` yang pernah memotong nota tersebut.
     - Mengembalikan histori: Tanggal Klaim, Nomor Transaksi Klaim, Nominal Kredit, dan Nama Petugas.

---

### B. Berkas View Baru
* **Nama Berkas:** `application/modules/kompensasiharga/views/audit_klaim_supplier.php`
* **Struktur Tampilan (100% Identik dengan Halaman Asli):**
  1. **Header & Filter Supplier:**
     - Judul: `AUDIT & VERIFIKASI KLAIM DISKON KE SUPPLIER`.
     - Dropdown selectpicker supplier dengan live-search.
     - Tab navigasi per supplier.
  2. **Filter Kategori Diskon & Tombol Badge:**
     - Kategori: *Semua*, *Hanya Diskon Reguler*, *Hanya Free Produk*, *Kombinasi*.
     - Tombol Filter Kolom Diskon Mandiri (Diskon 1 s/d 7, Free Produk).
     - Tombol Filter *Siap Diklaim* vs *Tampilkan Semua Data*.
  3. **Tabel Data DataTables:**
     - Kolom: `No`, `Date`, `Supplier/Vendor`, `Nomer GRN`, `Nomer PO`, `Person`, `Diskon 1`, `Diskon 2`, `Diskon 3`, `Diskon 4`, `Diskon 5`, `Diskon 6`, `Diskon 7`, `Free Produk`, `Diskon Supplier`, `Nilai Klaim`, `Sisa Diskon`, dan **`Status Audit`** (kolom baru).
  4. **Peningkatan Interaktif (Drill-Down Audit):**
     - Nomer GRN & Nomer PO berupa tautan interaktif $\rightarrow$ Membuka Modal Detail GRN/PO.
     - Nilai Klaim berupa tautan interaktif $\rightarrow$ Membuka Modal Riwayat Pencairan Diskon.
  5. **Dua Modal Bootstrap Pop-up:**
     - `#modalPreviewGrn`: Untuk menampilkan rincian barang & diskon asli GRN.
     - `#modalAuditMutasi`: Untuk menampilkan kartu mutasi pencairan klaim terdahulu.

---

## 4. Alamat URL Akses Tool
Halaman tool verifikasi mandiri ini dapat diakses secara langsung melalui URL:
```text
https://demo.mayagrahakencana.com/everest_26sep/kompensasiharga/AuditKlaimSupplier/index/3333/?gr=cGVtYmVsaWFu&step=1
```
*(Dapat juga didaftarkan sebagai sub-menu pada menu "TOOL DEKER PUSAT (DC)" atau "UTILITY PUSAT (DC)").*

---

## 5. Sumber Data & Persamaan Rekonsiliasi yang Diverifikasi

| Parameter di Tabel | Sumber Database | Logika / Nilai |
|---|---|---|
| **Diskon 1 s/d 7** | `_rek_pembantu_subpiutangsuppliertrans_cache` | Saldo `debet` akun `1010020030` dengan `extern2_id` = 1, 2, 3, 4, 5, 6, 8. |
| **Free Produk** | `_rek_pembantu_subpiutangsuppliertrans_cache` | Saldo `debet` akun `1010020030` dengan `extern2_id` = 7. |
| **Sisa Diskon** | `_rek_pembantu_subpiutangsuppliertrans_cache` | Total seluruh `debet` akun `1010020030` (Diskon 1–7 + FP). |
| **Diskon Supplier** | `transaksi_registry` (blob `main`) | Plafon awal saat GRN dibuat: `diskon_nilai_total` + `produk_rel_harga`. |
| **Nilai Klaim** | `MdlLockerStockDiskonVendor` / mutasi kredit | Akumulasi pencairan klaim (`3333`) yang sudah disetujui. |
| **Status Rekonsiliasi** | Evaluasi Komparasi Matematika | $\text{Sisa Diskon} + \text{Nilai Klaim} == \text{Diskon Supplier}$. |

---

## 6. Tahapan Pelaksanaan (Saat Diberikan Instruksi Eksekusi)
1. **Langkah 1:** Menulis berkas controller `AuditKlaimSupplier.php`.
2. **Langkah 2:** Menulis berkas view `audit_klaim_supplier.php`.
3. **Langkah 3:** Pengujian pembukaan halaman di browser via URL tool baru untuk memverifikasi keselarasan visual dengan halaman asli.
4. **Langkah 4:** Pengujian klik modal pop-up (Detail GRN & Riwayat Mutasi Klaim).
5. **Langkah 5:** Pengujian status rekonsiliasi (badge Valid / Selisih) terhadap seluruh supplier.

---
*Catatan: Dokumen ini berstatus draf perencanaan. Belum ada berkas kode program yang dibuat atau dieksekusi ke sistem.*
