TESINV V2.10.241 — FITUR STOK MINUS SEMENTARA
===========================================
Tidak ada perubahan VERSION.txt maupun changelog.
Base source: tesinv.zip (folder asli stinv101026).

INSTALASI / AKTIVASI
1. BACKUP aplikasi dan database TESINV sebelum menyalin file patch.
2. Ekstrak patch menimpa file yang sesuai di direktori TESINV.
3. Login dengan hak settings.edit, buka upgrade_negative_stock.php.
4. Klik Instal/Verifikasi Skema (menambah negative_stock_lots dan negative_stock_settlements).
   Alternatif: jalankan sql_negative_stock.sql sekali di phpMyAdmin.
5. Buka Pengaturan > Stok Minus Sementara > Izinkan Stok Minus (default OFF).
6. Gunakan negative_stock_monitor.php untuk memonitor saldo dan HPP provisional.

ALUR BISNIS
- Barang Keluar baru bisa mengakibatkan qty_small negatif bila opsi ON.
- Stok berkurang ketika Barang Keluar di-approve, bukan saat draft disimpan.
- Qty yang melebihi stok dicatat sebagai negative_stock_lots dengan HPP sementara
  (avg_cost berjalan; jika belum punya HPP sebelumnya, sementara 0).
- Invoice Pembelian berikutnya, di-approve berdasarkan urutan tanggal, memakai
  sebagian stok masuk untuk menutup lapisan stok minus FIFO.
- Selisih HPP dicatat pada negative_stock_settlements dan stock_movements dengan
  movement_type='sale', source_type='negative_stock_hpp', qty=0, value_out bertanda +/-.
  Nilai positif menambah HPP; nilai negatif mengurangi HPP. Ini mengubah Laba Rugi
  pada tanggal pembelian/rekonsiliasi tanpa menulis ulang jurnal penjualan lama.
- Retur Pembelian/Penjualan untuk barang yang masih punya HPP provisional diblokir.
  Setelah HPP final, retur penjualan menghitung HPP asal berikut seluruh koreksinya.
- Edit Approved Barang Keluar yang pernah minus diblokir untuk mempertahankan jejak HPP.
- Rebuild HPP historis / Integrity Repair Valuasi versi lama diblokir per barang
  yang pernah memiliki transaksi stok minus; jangan menghapus jurnal koreksi manual.
- Tutup Buku diblokir selama qty akhir bulan negatif dan/atau HPP sementara belum final.
- Kartu Stok, Valuasi, Export Valuasi, dan Dashboard menunjukkan keadaan negatif.

CONTOH REKONSILIASI
Awal: 5 UNIT @100.000 = 500.000.
Jual 8 UNIT -> saldo -3 UNIT; HPP sementara 800.000; persediaan -300.000.
Beli 10 UNIT @120.000 -> koreksi HPP +60.000, HPP final 860.000,
saldo 7 UNIT, persediaan 840.000 (avg_cost 120.000).
Bila beli hanya 2 UNIT, saldo -1 UNIT, nilai persediaan -100.000,
sementara 1 UNIT masih menunggu pembelian lanjutan.

CATATAN KEAMANAN DAN PENGUJIAN
- Jangan memproses tanggal pembelian yang lebih awal daripada mutasi terbaru
  barang yang sama ketika sedang menyelesaikan saldo minus.
- Perubahan tidak mengubah schema historis V2.10.241 yang sudah ada, tetapi
  MENAMBAHKAN dua tabel. Backup baru mengikutsertakan dua tabel tersebut.
- Restore backup LAMA yang dibuat sebelum pemasangan fitur dapat ditolak
  pemeriksaan kecocokan schema; lakukan restore lama menggunakan instalasi
  TESINV sebelum patch, kemudian terapkan patch dan instal skema kembali.
- Backup/Restore baru wajib diuji pada SALINAN database sebelum digunakan produksi.
- QA yang dijalankan dalam pembuatan patch: pemeriksaan sintaks file PHP,
  sintaks JS form, struktur arsip dan simulasi aritmetika skenario HPP.
- Uji transaksi end-to-end pada MySQL/MariaDB belum dijalankan di lingkungan
  pembuat patch karena tidak ada layanan database. Lakukan UAT menggunakan
  salinan database transaksi nyata sebelum mengaktifkan setting di produksi.
