FOODINDO IT INVENTORY - STOK OPNAME + ADJUSTMENT OTOMATIS
Revisi berdasarkan paket menu Laporan Stok dan Kartu Stok terpisah.

PASANG
1. Ekstrak ZIP ke folder terpisah dari aplikasi yang berjalan.
2. Buka Terminal Laragon. Jalankan PASANG-OPNAME-OTOMATIS.bat
   dari folder hasil ekstrak, lalu masukkan lokasi proyek lama.
   Contoh: C:\laragon\www\IT-Inventory-web
3. Installer membackup file yang diganti, menambahkan dua kolom penghubung
   melalui SATU migrasi baru, menyalin file revisi, lalu membersihkan cache.
   .env, vendor, data transaksi dan konfigurasi koneksi lama tidak ditimpa.
4. Login ulang. Input atau upload Stok Opname seperti biasa.
   Tidak perlu input atau upload Adjustment lagi untuk opname baru.

MANUAL
- Salin migration 2026_10_01_000002_link_stock_opname_adjustments.php.
- Dari Terminal Laragon di proyek lama, jalankan:
  php artisan migrate --path=database/migrations/2026_10_01_000002_link_stock_opname_adjustments.php --force
- Setelah migrasi berhasil, salin file lainnya pada DAFTAR-FILE-LAPORAN-STOK.txt.
- Jalankan: php artisan optimize:clear --except=cache

CARA KERJA
Contoh: saldo sistem 100, opname fisik 95 => adjustment otomatis -5 => saldo 95.
Saldo sistem 100, fisik 105 => adjustment +5 => saldo 105.
Fisik 0 diperbolehkan. Fisik negatif atau lebih dari 2 desimal ditolak.
Opname dan adjustment disimpan dalam satu transaksi database.
Satu opname memiliki tepat satu adjustment terkait, termasuk jika selisih nol.
Simpan ulang/edit opname memperbarui adjustment terkait; tidak membuat duplikat.
Hapus opname juga menghapus adjustmentnya dan memperbarui opname berikutnya.
Adjustment otomatis tidak boleh diedit/dihapus langsung melalui menu Adjustment.
Edit atau hapus stok opname asalnya. Adjustment manual tetap seperti sebelumnya.
Kolom Status Penyesuaian, Saldo Sebelum Opname dan Selisih / Adjust Otomatis
tersedia di tabel Stok Opname. Hak input/upload opname sudah mencakup proses
otomatis ini, tanpa perlu memberikan hak input adjustment kepada staff.

TANGGAL DAN PERHITUNGAN
Adjustment otomatis memakai tanggal bukti penerimaan/pengeluaran (jika kosong,
pakai tanggal daftar), serta tanggal pelaksanaan untuk opname/adjustment.
Opname dianggap hasil hitung fisik setelah transaksi pada tanggal yang sama.
Urutan: IN, OUT, adjustment manual, pasangan adjustment otomatis + opname
menurut tanggal pelaksanaan dan ID opname. Tabel tidak memiliki jam transaksi.
Jika transaksi historis di aplikasi ditambah, diedit atau dihapus, adjustment
opname otomatis berikutnya dihitung ulang agar saldo fisik tetap konsisten.
Kartu stok menunjukkan saldo setelah adjustment dan selisih yang diterapkan.
Pada laporan yang memilih tanggal daftar, saldo pembanding dapat berbeda
karena adjustment otomatis selalu menggunakan basis tanggal bukti.
Stok awal = IN - OUT + penyesuaian sebelum periode awal.
Stok akhir = stok awal + IN - OUT + seluruh adjustment dalam periode.
Nilai fisik opname tidak ditambahkan lagi ke stok akhir; selisih otomatisnya
sudah masuk melalui tabel adjustments. Master barang menjadi referensi kode,
nama, kategori dan satuan. Jumlah antar satuan berbeda tidak dijumlahkan.

DATA LAMA
Opname yang sudah ada sebelum migrasi diberi status Historis / manual.
Data tersebut TIDAK langsung disesuaikan ulang, termasuk jika diedit, supaya
adjustment manual yang mungkin sudah dibuat sebelumnya tidak dihitung double.
Otomatis berlaku untuk opname BARU yang disimpan/upload setelah revisi terpasang.
Jangan upload ulang file opname lama yang sudah diproses manual.
Upload ulang file baru mencatat baris opname baru; saldo tidak ditambahkan
berulang karena adjustment selalu dihitung sebagai selisih terhadap saldo saat itu.
Untuk mengoreksi opname yang sudah otomatis, gunakan Edit pada baris tersebut.

LAPORAN
Menu tetap terpisah: Laporan > Laporan Stok, dan Laporan > Kartu Stok.
Kalender awal/akhir, pencarian/filter, Excel, PDF dan cetak tetap tersedia.
Ekspor/cetak mencakup seluruh halaman sesuai filter.
Printer dipilih melalui dialog cetak browser, ukuran A4 landscape.

PENGUJIAN
Diuji memakai database simulasi: tambah/edit/hapus opname, tanggal mundur,
beberapa opname tanggal sama, transaksi historis berubah, perpindahan barang,
fisik nol, simpan ulang, CSV/XLSX, validasi dan rollback, kartu stok lintas
halaman, halaman Filament, Excel dan PDF.
Belum diuji dengan MySQL produksi pengguna. Cocokkan satu barang terlebih dahulu.
Backup file lama tersimpan dalam folder backup-opname-otomatis-TANGGAL_JAM.
