# 📋 PT. Everest - ERP Web - Modul Opname

Aturan spesifik untuk pengembangan dan validasi modul `opname` PT. Everest.

---

## 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`**
- **`1119`**
- **`2227`**
- **`2228`**
- **`2229`**
- **`3339`**
- **`4418`**
- **`4419`**
- **`5559`**

### Komponen Bisnis (`components`) Terlibat:
- `FifoAverage`
- `FifoAverageOpname`
- `FifoAverageSupplies`
- `FifoAverageSuppliesOpname`
- `FifoProdukJadiOpname`
- `FifoProdukJadiRakitanOpname`
- `FifoSuppliesOpname`
- `Jurnal`
- `LockerStock`
- `LockerStockMutasi`
- `LockerStockMutasiSupplies`
- `LockerStockProduksi`
- `LockerStockSupplies`
- `Opname`
- `OpnameData`
- `ProdukSerialNumber`
- `ProdukSerialNumberExec`
- `ProdukSerialNumberExtractorOpname`
- `ProdukSerialNumberExtractorOpnameFinal`
- `Rekening`
- `RekeningPembantuEfisiensiBiaya`
- `RekeningPembantuEfisiensiBiayaMain`
- `RekeningPembantuKerugian`
- `RekeningPembantuLRLainlain`
- `RekeningPembantuProduk`
- `RekeningPembantuProdukPerSerial`
- `RekeningPembantuSupplies`
