# PANDUAN REVIU KODE & LOGIK BISNIS: KONVERSI STOK VARIAN (ERP STANDARD)

## 1. PENDAHULUAN & RUANG LINGKUP
Dokumen ini berfungsi sebagai instruksi kerja (system prompt/knowledge base) bagi AI Agent untuk mereview source code, logika database, dan alur bisnis terkait fitur **Switching Mode Produk (Non-Variant ke Variant Configuration)**. Fitur ini mengadopsi standar ERP kelas atas seperti SAP IS-Retail / S/4HANA Fashion.

Karakteristik Transaksi:
*   **Kode Induk (Parent/Generic Material):** `S-ADS` (Sepatu Adidas)
*   **Kode Varian (Child/Variant SKU):** `S-ADS-[Warna]-[Ukuran]` (Contoh: `S-ADS-R-S40`, `S-ADS-B-S40`)

---

## 2. KEPATUHAN STANDAR ISO (COMPLIANCE AUDIT)
Setiap baris kode dan validasi logika yang diperiksa oleh AI Agent harus mendukung kepatuhan terhadap standar internasional berikut:

### A. ISO 9001:2015 (Sistem Manajemen Mutu - Traceability)
*   **Aturan Kode:** Sistem wajib mempertahankan hubungan hierarki antara SKU Varian Baru dengan SKU Induk asal. 
*   **Tujuan Audit:** Memastikan ketertelusuran riwayat produk (*batch traceability*). Jika terjadi penarikan barang (*recall*), sistem harus bisa melacak bahwa varian `S-ADS-R-S40` berasal dari inventaris historis `S-ADS`.

### B. ISO/IEC 27001:2022 (Keamanan Informasi & Audit Trail)
*   **Aturan Kode:** Setiap eksekusi *switching* dan pemindahan stok wajib mencatat log aktivitas (*Audit Logs*) yang tidak dapat dimanipulasi (*immutable*).
*   **Data Wajib Log:** `User_ID`, `Timestamp`, `Old_Stock_Qty`, `New_Stock_Per_Variant`, `Movement_Type_Used`, dan `Financial_Journal_ID`.

### C. ISO 28000:2007 (Keamanan Rantai Pasok)
*   **Aturan Kode:** Total kuantitas fisik sebelum konversi harus sama persis dengan total kuantitas setelah konversi ($Q_{awal} = \sum Q_{varian}$). Tidak boleh ada kehilangan stok tak berdokumen selama proses pemecahan varian di sistem.

---

## 3. VALIDASI LOGIKA BISNIS (BUSINESS LOGIC RULES)
AI Agent wajib menolak (*throw error/flag validation*) jika kode aplikasi melanggar aturan bisnis (Business Rules) di bawah ini:

### Rule 3.1: Prasyarat Stok Nol (Zero Stock Validation)
*   **Logika:** Modifikasi status produk dari *Non-Variant* ke *Variant* pada kode induk (`S-ADS`) **HANYA** boleh dilakukan jika saldo stok fisik di gudang bernilai **0 (Nol)**.
*   **Alasan:** Mencegah terjadinya korup data inventaris (*inventory misalignment*) dan tumpang tindih kalkulasi harga pokok penjualan (HPP/Moving Average Price).

### Rule 3.2: Validasi Dokumen Menggantung (Open Document Integrity)
*   Sebelum proses *switching* disetujui, sistem wajib melakukan pemindaian data (*database query scanning*). Proses *switching* harus **DIBLOKIR** jika kode `S-ADS` masih terikat pada dokumen aktif berikut:
    1.  *Purchase Order* (PO) belum *Goods Receipt* / Lunas.
    2.  *Sales Order* (SO) belum *Delivery* / *Invoiced*.
    3.  Dokumen *Stock Opname* (Physical Inventory) yang belum di-*posting*.

### Rule 3.3: Konsistensi Nilai Keuangan (Financial Balancing)
*   **Logika:** Nilai total aset (Monetary Value) tidak boleh berubah setelah konversi.
*   **Formula:** $\text{Qty Old} \times \text{Standard Price Old} = \sum (\text{Qty Variant}_i \times \text{Standard Price Variant}_i)$
*   Akun akuntansi penyeimbang (*Inventory Adjustment Account*) yang digunakan pada saat pengurangan stok lama harus dikreditkan kembali dengan jumlah nilai yang sama persis saat pengisian stok varian baru.

---

## 4. SKEMA EKSEKUSI DATA (DATA & TRANSACTION FLOW)
AI Agent harus memastikan struktur kode mengikuti 3 fase transaksi (serupa dengan SAP Movement Types) yang berjalan secara atomik (*Database Transaction Isolation Level: Serializable*):

### Fase 1: Pengosongan (Goods Issue / Adjustment Minus)
*   Mengurangi stok `S-ADS` dari 100 pcs menjadi 0 pcs.
*   *Padanan SAP:* Movement Type `562` (Pembalikan Saldo Awal) atau `702` (Selisih Opname Minus).

### Fase 2: Skema Penamaan Otomatis (Auto-Generation SKU)
*   Sistem membaca tabel konfigurasi atribut (Warna, Ukuran) yang di-input user.
*   Format SKU wajib string gabungan: `[Parent_SKU]-[Color_Code]-[Size_Code]`.
*   AI Agent harus memastikan kode memiliki fungsi sanitasi string untuk mencegah karakter ilegal (seperti spasi atau simbol aneh) masuk ke nomor SKU baru.

### Fase 3: Pengisian Kembali (Goods Receipt / Initial Load)
*   Memasukkan stok riil hasil opname fisik ke SKU baru (misal: 40 pcs ke `S-ADS-R-S40` dan 60 pcs ke `S-ADS-B-S40`).
*   *Padanan SAP:* Movement Type `561` (Initial Load) atau `701` (Selisih Opname Plus).

---

## 5. INSTRUKSI REVIEW KODE BAGI AI AGENT
Saat melakukan reviu pada *repository* kode, periksa hal-hal berikut:
1.  **Cari SQL Query / ORM Method:** Apakah ada fungsi yang mengubah status produk menjadi "Varian" *tanpa* mengecek `where stock_qty = 0` terlebih dahulu? Jika ada, tandai sebagai **Critical Bug**.
2.  **Cari Error Handling:** Pastikan jika transaksi gagal di Fase 3 (misal: koneksi terputus saat upload Excel), sistem melakukan **Database Rollback** sehingga stok induk tidak hilang misterius (Fase 1 tidak boleh menetap jika Fase 3 gagal).
3.  **Cari Modul Hak Akses:** Pastikan fungsi *switching* ini dibatasi hanya untuk user dengan *role* `Inventory_Manager` atau `Data_Governance`.

