# BLUEPRINT CETAK BIRU MODUL: PRODUKSI (MANUFAKTUR & ASSEMBLING)
**Modul:** `produksi`  
**Workspace:** `new_san_variant`  
**Standard:** Single Variant Standard & Dual-Write Rollout  
**Tanggal Analisis:** 2026-07-29  

---

## 1. IDENTITAS MODUL

- **Nama Modul:** `produksi`
- **Pola Kompleksitas:** **Transaksi Kompleks** (Multi-Variant BOM Inherit-or-Override Engine via `ComProduksiBom`, Assembling Produksi Barang Jadi, Pengurangan Bahan Baku & Supplies Bervarian, Penambahan Stok FG Bervarian, & Dual-Write Stock Locker).
- **Jenis Transaksi (`jenisTr`):**
  - `776` : Assembling Produksi (Perakitan & Pengolahan Barang Jadi dari Bahan Baku)

---

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

### 2.1 Base Controller & Configuration

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

---

### 2.2 Entry Produksi & Multi-Variant BOM Resolution

#### [_processSelectProductAssembling.php](file:///c:/xampp/htdocs/new_san_variant/application/modules/produksi/controllers/_processSelectProductAssembling.php)
- **Fungsi Multi-Variant BOM Resolution**:
  - *Logic*: Memanggil `ComProduksiBom` untuk menarik formula bahan baku berdasarkan `variant_id` produk jadi (Pattern *Inherit-or-Override*).
  - Jika varian produk jadi memiliki formula khusus di `produksi_bom_detail`, gunakan formula varian (*override*); jika tidak ada, gunakan formula parent (`variant_id=0`) (*inherit*).

#### [Create.php](file:///c:/xampp/htdocs/new_san_variant/application/modules/produksi/controllers/Create.php)
- **Fungsi `index()`, `preview()`, `save()`**: Menyusun perintah kerja produksi (Work Order / SPK Produksi), mengunci stok bahan baku (`hold`) dan menyiapkan alokasi hasil produksi barang jadi bervarian.

---

### 2.3 Executing & FollowUp Approval

#### [FollowUp.php](file:///c:/xampp/htdocs/new_san_variant/application/modules/produksi/controllers/FollowUp.php)
- **Fungsi `doFollowup()`** *(Execution Finishing Assembly)*:
  - *Query & Models*:
    1. **Stock Deduction (BOM Items)**: Mengurangi stok bahan baku bervarian (`-active`) via `ComLockerStockDualWrite::pair()`.
    2. **Stock Addition (FG Variant)**: Menambah stok barang jadi bervarian (`+active`) via `ComLockerStockDualWrite::pair()`.
    3. **Jurnal Manufaktur**: Memanggil `ComJurnal` mencatat Persediaan Barang Jadi (D) vs Persediaan Bahan Baku (K) & Beban Assembling.
    4. **Registry Update**: Record log di `transaksi_registry`.

---

## 3. IDENTIFIKASI PERBEDAAN DENGAN MOCKUP GLOBAL

| No | Komponen / Fitur Unik | Deskripsi & Perbedaannya dengan Mockup Standar |
|:--:|:----------------------|:------------------------------------------------|
| 1 | **Multi-Variant BOM Engine (`ComProduksiBom`)** | Perhitungan formula bahan baku otomatis menggunakan pola *Inherit-or-Override* berdasarkan `variant_id` produk jadi. |
| 2 | **Assembling Selector (`_processSelectProductAssembling`)** | Selector khusus yang menguraikan komponen BOM menjadi item keranjang bahan baku dan bahan penolong bervarian. |
| 3 | **Dual-Write Stock Assembling Rebalancing** | Pengurangan stok bahan baku & penambahan barang jadi secara simultan via `ComLockerStockDualWrite`. |

---

## 4. ARSITEKTUR KODE BARU (THE BLUEPRINT)

### 4.1 Struktur Controller Baru

```
application/modules/produksi/
├── config/
│   ├── coTransaksiCore.php
│   ├── coTransaksiUi.php
│   ├── coTransaksiLayout.php
│   └── coTransaksiValues.php
├── controllers/
│   ├── Modul_Controller.php       # Base controller
│   ├── Create.php                 # Work Order Assembling Entry
│   ├── FollowUp.php               # Execution & Rebalancing Stock
│   ├── Transaksi.php              # Production Order List
│   ├── ActivityReport.php         # Laporan Hasil Produksi
│   ├── History.php                # Riwayat Produksi
│   ├── Printing.php               # Cetak SPK & Lembar Hasil Assembling
│   ├── ViewDetails.php            # Modal Detail View
│   ├── _processSelectProductAssembling.php # BOM Variant Engine
│   └── _shoppingCart.php          # Cart Rebalancer Manager
└── views/
    ├── transaksi_modul.php
    ├── shoppingCart.php
    └── printing.php
```

---

### 4.2 Panduan Langkah-demi-Langkah Developer

1. **Langkah 1: Gunakan `ComProduksiBom` pada `_processSelectProductAssembling.php`**
   - Pastikan penarikan komponen bahan baku memperhitungkan `variant_id` barang jadi.

2. **Langkah 2: Terapkan Dual-Write Stock Rebalancing pada `FollowUp.php`**
   - Gunakan `ComLockerStockDualWrite::pair()` untuk mutasi bahan baku -> barang jadi secara atomik.

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 `produksi` diselesaikan.
  2. File [blueprint_produksi.md](file:///c:/xampp/htdocs/new_san_variant/blueprint_produksi.md) dan `dev-jurnal.md` diterbitkan.
