# BLUEPRINT CETAK BIRU MODUL: OPNAME (STOCK OPNAME)
**Modul:** `opname`  
**Workspace:** `new_san_variant`  
**Standard:** Single Variant Standard & Dual-Write Rollout  
**Tanggal Analisis:** 2026-07-29  

---

## 1. IDENTITAS MODUL

- **Nama Modul:** `opname`
- **Pola Kompleksitas:** **Transaksi Kompleks** (Pemeriksaan Fisik Persediaan / Stock Take, Comparative Physical vs System Balance, Checklist Opname Varian Produk, Calculation of Discrepancies, & Dual-Write Stock Locker Adjustment).
- **Jenis Transaksi (`jenisTr`):**
  - `1119` : Stock Opname Fisik Gudang (Physical Count Sheet)
  - `2229` : Penyesuaian Selisih Opname Lebih
  - `2228` : Penyesuaian Selisih Opname Kurang
  - `3339` : Stock Opname Nilai & HPP Varian

---

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

### 2.1 Base Controller & Configuration

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

---

### 2.2 Entry Opname & Physical Checklist Engine

#### [_shoppingCart.php](file:///c:/xampp/htdocs/new_san_variant/application/modules/opname/controllers/_shoppingCart.php)
- **Fungsi `checklistOpname()`, `checklistOpnameNote()`**:
  - *Logic*: Mencatat hasil hitungan fisik per barang dan per varian (`variant_id`), membandingkan dengan stok sistem pada `stock_locker_variant`.

#### [Create.php](file:///c:/xampp/htdocs/new_san_variant/application/modules/opname/controllers/Create.php)
- **Fungsi `index()`, `preview()`, `save()`**: Menyusun draf berita acara stock opname, merekam selisih fisik vs sistem.

---

### 2.3 Executing & FollowUp Approval

#### [FollowUp.php](file:///c:/xampp/htdocs/new_san_variant/application/modules/opname/controllers/FollowUp.php)
- **Fungsi `doFollowup()`** *(Execution Opname Rebalancing)*:
  - *Query & Models*:
    1. **Dual-Write Stock Adjustment**: Memanggil `ComLockerStockDualWrite::pair()` untuk meng-adjust stok fisik `stock_locker` dan `stock_locker_variant` sesuai angka hitungan fisik terbaru.
    2. **Jurnal Opname**: Memanggil `ComJurnal` mencatat Persediaan Barang (D/K) vs Selisih Opname (K/D).
    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 | **Opname Variant Checklist (`_shoppingCart::checklistOpname`)** | UI & AJAX engine khusus untuk memasukkan jumlah hitungan fisik per `variant_id` dan menghitung otomatis selisih unit. |
| 2 | **Dual-Write Physical Rebalance (`ComLockerStockDualWrite`)** | Sinkronisasi penyesuaian stok opname ke `stock_locker` dan `stock_locker_variant` secara atomik. |

---

## 4. ARSITEKTUR KODE BARU (THE BLUEPRINT)

### 4.1 Struktur Controller Baru

```
application/modules/opname/
├── config/
│   ├── coTransaksiCore.php
│   ├── coTransaksiUi.php
│   ├── coTransaksiLayout.php
│   └── coTransaksiValues.php
├── controllers/
│   ├── Modul_Controller.php       # Base controller
│   ├── Create.php                 # Form Stock Take Entry
│   ├── FollowUp.php               # Approval & Stock Rebalancing
│   ├── Transaksi.php              # Opname Sheet List
│   ├── Opname.php                 # Specialized Opname Engine
│   ├── ActivityReport.php         # Laporan Hasil Opname
│   ├── History.php                # Riwayat Opname
│   ├── Printing.php               # Cetak Berita Acara Stock Opname
│   ├── ViewDetails.php            # Modal Detail (Multi-Variant Safe)
│   └── _shoppingCart.php          # Checklist Opname Manager
└── views/
    ├── transaksi_modul.php
    ├── shoppingCart.php
    └── printing.php
```

---

### 4.2 Panduan Langkah-demi-Langkah Developer

1. **Langkah 1: Terapkan Opname Variant Checklist pada `_shoppingCart.php`**
   - Pastikan metode `checklistOpname()` menghitung selisih fisik vs sistem per `variant_id`.

2. **Langkah 2: Gunakan `ComLockerStockDualWrite` pada `FollowUp.php`**
   - Gunakan `ComLockerStockDualWrite::pair()` untuk rebalance stok opname.

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