# 📑 DOKUMEN HUTANG TEKNIS (TECHNICAL DEBT) - MODUL BIAYA

Dokumen ini mencatat daftar perbaikan arsitektural dan restrukturisasi kode yang ditunda demi menjaga stabilitas fungsionalitas sistem (menghindari kerusakan *frontend*/antarmuka pengguna). Daftar ini wajib dieksekusi di masa depan saat ada jadwal pembaruan antarmuka secara menyeluruh.

---

## 1. Refactoring DOM Injection ke Standar JSON API
**Status:** ⚠️ Ditunda (Tingkat Keparahan: Menengah - Arsitektur MVC)
**Berkas Terdampak:** Seluruh file `_processSelect*.php` (contoh: `_processSelectNota.php`, `_processSelectPendapatan.php`, `_processSelectProductPpn.php`, dll).

**Deskripsi Masalah:**
File-file *controller* ini saat ini melakukan *hardcode* manipulasi DOM JavaScript secara langsung dari sisi server. Contoh:
```php
echo "<script>top.alert('Stok tidak mencukupi'); top.$('#modal').modal('hide');</script>";
```
Pendekatan ini melanggar prinsip MVC (Model-View-Controller) dan sangat menyulitkan integrasi dengan API eksternal seperti Coretax DJP atau aplikasi Mobile.

**Rencana Solusi (Action Plan):**
1. Ubah semua *output echo script* di dalam *controller* menjadi respons JSON terstruktur standar:
   ```json
   { "status": 0, "message": "Stok tidak mencukupi", "action": "hide_modal" }
   ```
2. Tulis ulang penanganan (event handler) pada sisi *frontend* (file `views/` atau `*.js`) agar berhenti menggunakan `$('#element').load(url)` atau injeksi iframe, dan beralih menggunakan AJAX (`$.post` / `$.getJSON`) untuk mem-*parsing* respons JSON dari *controller* secara dinamis.

---

## 2. Pemisahan Logika Pembentukan UI (View) dari Controller
**Status:** ⚠️ Ditunda (Tingkat Keparahan: Menengah)
**Berkas Terdampak:** Controller Selector seperti `_selectorItem.php`, `_selectorPihak.php`, `_selectorPihakMain.php`.

**Deskripsi Masalah:**
Logika perakitan string HTML (seperti tag `<ul>`, `<li>`, `<span>`, ikon FontAwesome) dilakukan langsung di dalam layer *Controller*. Ini mencemari logika bisnis dan membuat desain UI sulit dikustomisasi.

**Rencana Solusi (Action Plan):**
1. Pindahkan seluruh string HTML tersebut ke file `views/` terpisah (contoh: `views/selector_list.php`).
2. Controller hanya boleh mengirimkan *array* data ke `view()` melalui perintah `$this->load->view('selector_list', $data)`.

---

## 3. Dekomposisi File Monolitik Raksasa (God Object)
**Status:** ⚠️ Ditunda (Tingkat Keparahan: Tinggi - *Maintainability*)
**Berkas Terdampak:** `FollowUp.php` (36.900+ baris), `Create.php` (18.400+ baris).

**Deskripsi Masalah:**
File terlalu besar (ribuan baris kode) sehingga melanggar prinsip *Single Responsibility Principle* (SRP). Perubahan kecil pada logika bisnis dapat secara tidak sengaja merusak alur (*flow*) lain karena variabel dan status saling bergantung di dalam satu lingkup (*scope*) yang terlampau luas.

**Rencana Solusi (Action Plan):**
1. Pecah fungsi raksasa seperti `doFollowup()` menjadi beberapa *Library* atau *Helper* modular yang masing-masing memiliki satu tujuan fungsional (misal: modul validasi, modul perhitungan pajak, modul pencatatan buku besar).
2. Terapkan prinsip DRY (*Don't Repeat Yourself*) pada alur penciptaan draf (*draft creation*) antara `Create.php` dan `_shoppingCart.php`.
