# 📋 PT. INDOSAN - ERP Web - Modul Opname

Aturan spesifik untuk pengembangan dan validasi modul `opname` PT. INDOSAN.

---

## 1. Kode Transaksi (`jenisTr`)
*   **`1119`**: Stok Opname Produk Pusat (Complete/Final).
*   **`1119r` / `1119ro`**: Status Draft & Review (Pusat).
*   **`2229`**: Stok Opname Produk Cabang (Complete/Final).
*   **`2229r` / `2229ro`**: Status Draft & Review (Cabang).

---

## 2. Aturan Coding Khusus Opname

### 2.1 Pengecekan Kunci Transaksi Gantung (Sebelum Opname)
*   Sebelum memulai proses opname, sistem **WAJIB** mengecek dan memastikan tidak ada transaksi gantung (mutasi yang belum diselesaikan) di cabang/gudang yang bersangkutan.
*   Pengecekan dilakukan dengan memanggil `$this->opname_model->callTransaksiBeforeOpname()` atau library terkait. Jika ditemukan transaksi gantung, proses opname **harus diblokir**.

### 2.2 Valuasi HPP FIFO/Average & Jurnal Akuntansi
*   Selisih opname (`qty_opname` - `stok_sistem`) wajib dinilai berdasarkan HPP riil menggunakan library/komponen `FifoAverageOpname`.
*   **Penjurnalan Otomatis (Step 3 - Complete):**
    *   **Selisih Kurang (Loss/Kerugian):**
        *   Debet: `7020020` (Kerugian/Beban Selisih Persediaan)
        *   Kredit: `1010030030` (Persediaan Produk)
    *   **Selisih Lebih (Profit/Laba):**
        *   Debet: `1010030030` (Persediaan Produk)
        *   Kredit: `7010150` (Laba lain-lain / Selisih Persediaan)

### 2.3 Penanganan Serial Number (S/N) Otomatis
*   Jika produk memiliki serial number dan terjadi **selisih lebih** tanpa input scanner manual (misal via upload Excel), sistem **WAJIB** men-generate **System Serial Number** secara otomatis (disimpan pada `produk_serial_number_2`).
*   Format Auto-Generate System Serial:
    `[Tanggal_PO]:[Urutan_PO]:[Urutan_GRN]:[Urutan_GRN_PO]:[ID_Produk]:[Urutan_Serial_Baru]:[Kode_Part]`

### 2.4 Validasi Sesi & Integritas Main Elements
*   Selama transisi antar-langkah (Step 1 -> Step 2 -> Step 3) di `FollowUp.php` atau `__FollowUp.php`, array `main_elements` **WAJIB** dipertahankan dengan menyalinnya dari session lama ke session baru:
    ```php
    "main_elements" => isset($_SESSION[$oldCode]['main_elements']) ? $_SESSION[$oldCode]['main_elements'] : array(),
    ```

---

## 🛠️ Lampiran Teknis (Hasil Audit Codebase)

### Berkas Konfigurasi Utama:
- `coTransaksiCore.php`

### Kode Transaksi (`jenisTr`) Terdaftar:
- **`1118`**
- **`1118r`**
- **`1118ro`**
- **`1119`**
- **`1119r`**
- **`1119ro`**
- **`2227`**
- **`2227r`**
- **`2227ro`**
- **`2228`**
- **`2228r`**
- **`2228ro`**
- **`2229`**
- **`2229r`**
- **`2229ro`**
- **`3339`**
- **`3339r`**
- **`3339ro`**
- **`5559`**
- **`5559r`**
- **`5559ro`**
### Komponen Bisnis (`components`) Terlibat:
- `FifoAverage`
- `FifoAverageOpname`
- `FifoAverageSuppliesOpname`
- `FifoProdukJadi`
- `FifoProdukJadiOpname`
- `FifoProdukJadiRakitan`
- `FifoProdukJadiRakitanOpname`
- `FifoSupplies`
- `FifoSuppliesOpname`
- `Jurnal`
- `LockerStock`
- `LockerStockMutasi`
- `LockerStockMutasiSupplies`
- `LockerStockProduksi`
- `LockerStockSupplies`
- `Opname`
- `OpnameData`
- `Rekening`
- `RekeningPembantuEfisiensiBiaya`
- `RekeningPembantuEfisiensiBiayaMain`
- `RekeningPembantuKerugian`
- `RekeningPembantuLRLainlain`
- `RekeningPembantuProduk`
- `RekeningPembantuSupplies`