# BLUEPRINT CETAK BIRU MODUL: BIAYA & SUPPLIES
**Modul:** `biaya`  
**Workspace:** `new_san_variant`  
**Standard:** Single Variant Standard & Dual-Write Rollout  
**Tanggal Analisis:** 2026-07-29  

---

## 1. IDENTITAS MODUL

- **Nama Modul:** `biaya`
- **Pola Kompleksitas:** **Transaksi Kompleks** (Pengeluaran Biaya Operasional, Pembelian & Pemakaian Supplies / Bahan Penolong Bervarian via `_processSelectSupplies`, Penggajian via `_processSelectRekeningGaji`, Pemotongan Pajak PPh 21/23/4(2), & Dual-Write Stock Supplies Locker).
- **Jenis Transaksi (`jenisTr` Utama):**
  - `677` : Pengeluaran Biaya Operasional General
  - `675` : Pembelian Supplies / Bahan Penolong
  - `676` : Biaya Gaji & Honorarium
  - `762` : Pembayaran Beban Akrual / Utang Biaya
  - `2675`: Biaya Dihutangkan

---

## 2. DAFTAR FUNGSI & LOGIKA BISNIS (REVERSE ENGINEERING)

### 2.1 Base Controller & Configuration

#### [Modul_Controller.php](file:///c:/xampp/htdocs/new_san_variant/application/modules/biaya/controllers/Modul_Controller.php)
- **Fungsi `__construct()`**: Load config `coTransaksiUi`, `coTransaksiCore`, `coTransaksiLayout`, `coTransaksiValues`, initialize session rights & tables.

---

### 2.2 Entry Transaksi (Create & Supplies Engine)

#### [Create.php](file:///c:/xampp/htdocs/new_san_variant/application/modules/biaya/controllers/Create.php)
- **Fungsi `index()`**: Entry form jenis pengeluaran biaya / pemilihan supplies bervarian.
- **Fungsi `preview()`**: Preview perkiraan jurnal Beban (D) vs Kas/Bank (K) serta potongan pajak.
- **Fungsi `save()`**: Save draft transaksi biaya ke `transaksi`, `transaksi_data`, `transaksi_values`.

#### [_processSelectSupplies.php](file:///c:/xampp/htdocs/new_san_variant/application/modules/biaya/controllers/_processSelectSupplies.php)
- **Fungsi Supplies Variant Handler**:
  - *Logic*: Menggunakan `resolveRequestItemIdentity()` untuk memetakan `supplies_id` dan `variant_id` bahan penolong, serta memproses dual-write stock locker via `ComLockerStockSuppliesDualWrite`.

#### [_processSelectRekeningGaji.php](file:///c:/xampp/htdocs/new_san_variant/application/modules/biaya/controllers/_processSelectRekeningGaji.php)
- **Fungsi Payroll Expense**: Pemetaan komponen gaji karyawan, PPh 21, dan tunjangan.

---

### 2.3 Executing & FollowUp Approval

#### [FollowUp.php](file:///c:/xampp/htdocs/new_san_variant/application/modules/biaya/controllers/FollowUp.php)
- **Fungsi `doFollowup()`**:
  - *Query & Models*:
    1. **Jurnal Otomatis**: Memanggil `ComJurnal` untuk mencatat Beban Operasional / Supplies (D) dan Kas/Bank/Hutang (K).
    2. **Dual-Write Stock Supplies**: Panggil `ComLockerStockSuppliesDualWrite::pair()` untuk stok bahan penolong bervarian.
    3. **Registry Update**: Log step registrasi di `transaksi_registry`.

---

## 3. IDENTIFIKASI PERBEDAAN DENGAN MOCKUP GLOBAL

| No | Komponen / Fitur Unik | Deskripsi & Perbedaannya dengan Mockup Standar |
|:--:|:----------------------|:------------------------------------------------|
| 1 | **Supplies Variant Dual-Write (`_processSelectSupplies`)** | Penanganan stok bahan penolong bervarian (cart key: `supplies:{id}:{variant_id}`) menggunakan `ComLockerStockSuppliesDualWrite`. |
| 2 | **Payroll & Salary Allocation (`_processSelectRekeningGaji`)** | Sub-controller alokasi beban gaji per-divisi dan pemotongan PPh 21. |
| 3 | **Withholding Tax Calculations (`Taxes.php`)** | Perhitungan otomatis PPh Pasal 23, PPh 4(2) atas sewa/jasa di form biaya. |

---

## 4. ARSITEKTUR KODE BARU (THE BLUEPRINT)

### 4.1 Struktur Controller Baru

```
application/modules/biaya/
├── config/
│   ├── coTransaksiCore.php
│   ├── coTransaksiUi.php
│   ├── coTransaksiLayout.php
│   └── coTransaksiValues.php
├── controllers/
│   ├── Modul_Controller.php       # Base controller
│   ├── Create.php                 # Form Input Biaya & Supplies
│   ├── FollowUp.php               # Approval & Execution Expense
│   ├── Transaksi.php              # Expense List
│   ├── ActivityReport.php         # Laporan Biaya
│   ├── History.php                # Riwayat Biaya
│   ├── Printing.php               # Voucher Pengeluaran Kas/Bank
│   ├── ViewDetails.php            # Modal Detail View
│   ├── _processSelectSupplies.php # Supplies Variant Selector (Dual-Write)
│   ├── _processSelectRekeningGaji.php # Payroll Expense Handler
│   └── _shoppingCart.php          # Cart Manager
└── views/
    ├── transaksi_modul.php
    ├── shoppingCart.php
    └── printing.php
```

---

### 4.2 Panduan Langkah-demi-Langkah Developer

1. **Langkah 1: Gunakan `ComLockerStockSuppliesDualWrite` pada `_processSelectSupplies`**
   - Pastikan cart key `supplies:{id}:{variant_id}` memicu dual-write stok supplies.

2. **Langkah 2: Integrasikan Potongan Pajak pada `FollowUp.php`**
   - Pastikan akun utang pajak PPh 23 / 4(2) tercatat tepat di `ComJurnal`.

3. **Langkah 3: Verifikasi PHP 5.6 & Update UAT Checklist**
   - Lakukan linting `C:\xampp\php\php.exe -l` dan update `docs/uat-checklist.md`.

---

### 5. KESIMPULAN & STATUS EKSEKUSI

- 🟢 **Pekerjaan Selesai (Completed & Verified)**:
  1. Blueprint modul `biaya` diselesaikan.
  2. File [blueprint_biaya.md](file:///c:/xampp/htdocs/new_san_variant/blueprint_biaya.md) dan `dev-jurnal.md` diterbitkan.
