STINV V2.10.241 - PATCH MIGRASI HISTORI PEMBELIAN/PENJUALAN DENGAN ENGINE PERIODIC
Tanggal: 31-10-2026. TIDAK MENAIKKAN VERSI ATAU MENGUBAH CHANGELOG.

Isi patch: empat file PHP pada folder includes/ dan petunjuk ini.

FITUR:
1) Pembelian historis dan Penjualan Mode 1: tetap PASSIVE (affect_stock=0, affect_cash=0).
   Diskon Invoice sumber yang dijumlahkan per faktur dialokasikan ke item secara proporsional
   dalam nominal sen. Simpan gross_total, item_discount_amount, item_discount_percent,
   harga item netto dan discount_amount header=0. Total tagihan/PPN/pembayaran tetap sama.
   Barang berulang dalam satu faktur sudah digabung oleh importer STINV sebelumnya.
   Safety Backup valid wajib dibuat sebelum import Mode 1/Pembelian.
2) Penjualan Mode 2 saat inventory_cost_method=periodic_weighted_average:
   Membutuhkan pve_* AKTIF, tidak fallback diam-diam ke Moving Average.
   Preview memeriksa qty kronologis dan estimasi HPP Periodic bulanan, bukan membandingkan
   nilai akhir stok dengan perhitungan Moving Average yang berbeda metode.
   Transaksi tetap diblokir bila stok minus pada tanggal penjualan, qty mismatch,
   ledger balance mismatch, periode FINAL/closed, atau snapshot sebelum periode terdampak stale.
   Saat Apply: Safety Backup berisi snapshot PVE wajib; seluruh proses dalam satu transaksi.
   Hitung ulang snapshot PVE OPEN, nilai mutasi yang BARU diisi dari PVE, dan hanya saldo
   berjalan legacy pada baris terdampak yang digeser sebesar qty/nilai import baru.
   Nilai unit_cost/value_in/value_out transaksi lama TIDAK dikalkulasi ulang atau diubah.
   Laba kotor HPP Mode 2 berasal dari pve_movement_values.
3) Auto Recalculate setelah import tetap aktif dan idempoten; bulan sebelum yang terdampak
   hanya di-verify TERKINI, tidak direbuild lagi.
4) Versi, changelog, modul cetak, migrasi batch lama, dan jurnal GL tidak disentuh.

INSTALASI:
- Backup database dan source STINV sebelum pemasangan.
- Jika menggunakan PATCH, salin folder includes/ ke root aplikasi STINV, overwrite 4 file.
- Jika menggunakan FULL, backup file STINV lama dan unggah full source ke folder aplikasi.
- Buka pengaturan Cek/Perbaiki Database; pastikan kolom diskon per item tersedia.
- Untuk Periodic: pastikan tabel pve_config, pve_opening, pve_periods, pve_product_periods,
  pve_movement_values, pve_audit tersedia dan pve_active() = true.
- Pastikan backup SQL menghasilkan PVE-SNAPSHOT-START..END ketika Periodic aktif.
- Uji dahulu pada salinan database: PREVIEW Import Pembelian Mode 1, Penjualan Mode 1,
  dan Penjualan Mode 2; lihat Preview Impact + total sebelum APPLY.

CATATAN KHUSUS KASUS OKTOBER 2026:
- SERENDY, SIDAMIN, Rajaxone masih dapat diblokir karena minus kronologis yang nyata.
  Harus ada penerimaan stok terdokumentasi pada/before tanggal keluar.
- Selisih RATGONE Rp21.199,82 antara Moving replay vs saldo existing bukan dasar
  untuk mengubah HPP Periodic. Namun jika stock tidak cocok dengan ledger tersimpan,
  pengaman masih memblokir.
- Jika engine PVE belum aktif walaupun settings menyebut periodic, Mode 2 diblokir.
- Tidak ada jaminan lulus pada database operasional tanpa testing MySQL.

VALIDASI LOKAL:
- PHP -l 4 file: PASS
- Uji alokasi diskon sample dan integritas sen: PASS
- Uji simulasi qty kronologis termasuk tanggal sama: PASS
- Uji database MySQL dan cetak/printer: BELUM DILAKUKAN pada runtime ini.
