================================================================ PAKET TIMPA — Digitalisasi_3_3 v616 Gudang Klawas & Gudang Exbkpl (kumulatif: memuat v549, v551, dan v552 s/d v616) Disusun: 16 September 2026 ================================================================ INI PAKET TIMPA, BUKAN FOLDER PENGGANTI. Extract di atas folder yang sudah ada. Yang diganti HANYA berkas yang memang berubah; sisanya dibiarkan utuh. Foto Anda aman — berapa pun banyaknya, dan tidak peduli kapan diunggahnya. YANG SENGAJA TIDAK ADA DI PAKET INI: ✗ backend/uploads/*.jpg tidak ada satu pun foto di sini. Yang ikut hanya struktur foldernya (kosong), supaya folder gudang baru terbentuk. Foto di server tidak tersentuh sama sekali. ✗ backend/.env setelan server TIDAK ditimpa. Kalau Anda pernah mengubahnya langsung di server, perubahan itu tetap utuh. ✗ node_modules package.json TIDAK berubah di update ini (sudah saya bandingkan), jadi 139 paket di server tetap cukup. Tidak perlu npm install. YANG ADA: ✔ Kode v616 lengkap 35 route, 8 utils, 39 halaman ✔ frontend/dist SUDAH DIBUILD — tidak perlu npm run build ================================================================ LANGKAH PASANG — 3 LANGKAH ================================================================ 1. BACKUP (10 detik, jangan dilewat) cd /path/ke/folder/induk cp -r Digitalisasi_3_3 Digitalisasi_3_3_backup_$(date +%F) 2. TIMPA unzip -o Digitalisasi_3_3_TIMPA_v616.zip -d /path/ke/folder/induk Flag -o = timpa tanpa bertanya. Lewat cPanel File Manager: upload ZIP ini ke folder INDUK (folder yang MEMUAT Digitalisasi_3_3), klik kanan → Extract. >>> JANGAN pilih opsi yang menghapus folder tujuan. Kalau muncul dialog di FileZilla/WinSCP, pilih OVERWRITE. <<< 3. RESTART BACKEND cd Digitalisasi_3_3/backend pm2 restart all PERIKSA LOG — dua baris ini HARUS muncul: [gudang] Gudang Klawas siap di /api/soh-gudang-klawas (tabel soh_gudang_klawas) [gudang] Gudang Exbkpl siap di /api/soh-gudang-exbkpl (tabel soh_gudang_exbkpl) Lalu buka aplikasi, tekan Ctrl+Shift+R. CEK: http://50.6.7.38:3020/api/health harus muncul: {"success":true, ... "db":"terhubung"} SELESAI. Tidak ada perintah salin foto, tidak ada rename folder. ================================================================ UJI SESUDAH PASANG — LANGKAH (e) YANG PALING PENTING ================================================================ a. Suku Cadang — sekarang ada EMPAT tab gudang. b. Gudang Klawas › Stok (SOH): kosong. Itu benar, tabelnya baru. c. Barang Masuk di Klawas: tambahkan satu part. Stoknya muncul di SOH Klawas, dan TIDAK muncul di SOH gudang lain. d. Barang Keluar dari Klawas: part tadi harus muncul di daftar saran, kolom Sisa terisi, stok berkurang setelah simpan. e. >>> PERIKSA SOH MSF 1 DAN MSF 2. Keduanya TIDAK BOLEH BERUBAH SAMA SEKALI oleh langkah (c) dan (d). <<< Kenapa (e) paling penting: sebelum v616, "gudang" berupa percabangan dua arah di 282 tempat — kode === 'MSF1' ? 'soh_gudang_msf_1' : 'soh_gudang_msf' Bentuk itu bekerja selama gudangnya tepat dua. Kalau ada SATU percabangan yang terlewat, gudang baru akan diam-diam diperlakukan sebagai MSF 2 — dan stok MSF 2 ikut berubah tanpa ada yang menyadarinya. Kalau itu terjadi, hentikan dan laporkan. ================================================================ HAK AKSES — DUA BARIS BARU ================================================================ Master Data › Hak Akses Menu kini punya: 🏭 Gudang Klawas 🏭 Gudang Exbkpl Hak bawaannya DISAMAKAN dengan MSF 1/MSF 2, jadi orang yang sudah boleh membuka gudang lama tidak perlu diatur ulang satu per satu. ================================================================ SUDAH DIUJI DI SINI — PENIMPAANNYA DISIMULASIKAN BETULAN ================================================================ Saya tidak hanya membuat ZIP-nya. Saya salin folder server Anda, menimpanya dengan paket ini, lalu menjalankannya. SEBELUM ditimpa: foto uploads 66 node_modules 139 paket .env DB_HOST localhost route 31 berkas SESUDAH ditimpa: foto uploads 66 ← UTUH, tidak satu pun hilang node_modules 139 ← utuh .env DB_HOST localhost ← utuh, tidak tertimpa route 35 ← bertambah 4 (termasuk usulanpart.js) utils 8 ← bertambah 3 (gudang, sohFactory, collation) LALU DIJALANKAN, memakai node_modules 139 paket milik server: ✔ tidak ada "Cannot find module" ✔ DUA BARIS [gudang] muncul dengan nama tabel yang benar ✔ SPA tersaji memakai build baru (assets/index-jIeF2HLg.js) ✔ foto lama tetap terbaca: /uploads/bd/bd_1786752783092_h8t3x.jpeg → 200, 227.886 byte ✔ /api/soh-gudang-klawas dan /api/soh-gudang-exbkpl TERDAFTAR Selain itu: ✔ `node --check` lolos untuk SELURUH berkas .js backend ✔ `vite build` berhasil — dist 81 berkas, index.html menunjuk assets/index-jIeF2HLg.js ✔ package.json backend & frontend dibandingkan dengan milik server: TIDAK BERUBAH — itulah dasar keputusan tidak menyertakan node_modules ✔ Fitur update sebelumnya masih hidup: bypass-pengecekan (v549), cek-stok-nama (v551) ================================================================ BERSIH-BERSIH OPSIONAL ================================================================ "Timpa" tidak bisa menghapus. Tiga berkas sampah ini masih ada di server dan tidak dipakai — hapus manual kalau mau rapi: rm Digitalisasi_3_3/backend/aichat.js rm Digitalisasi_3_3/backend/routes/pr.js.tmp rm Digitalisasi_3_3/frontend/src/views/TiketPerbaikan.vue.bak Aset build lama di frontend/dist/assets juga menumpuk dan hanya memakan tempat — index.html sudah menunjuk yang baru. Cara aman membersihkan: hapus SELURUH isi frontend/dist, lalu extract ulang paket ini. ================================================================ CATATAN TEKNIS ================================================================ 1. frontend/.env.production masih: VITE_API_URL=http://50.6.7.38:3020/api Dipertahankan apa adanya. Kalau nanti pakai domain atau HTTPS, ganti jadi /api lalu build ulang. 2. Kunci hak akses gudang sekarang dibaca dari daftar di backend/utils/gudang.js, bukan percabangan if. Gudang yang namanya TIDAK ada di daftar mengembalikan kunci KOSONG — dan kosong berarti "tanpa pembatasan". Jadi kalau nanti menambah gudang kelima, mendaftarkannya di utils/gudang.js itu wajib; kalau terlewat, gudang itu terbuka untuk semua orang tanpa peringatan apa pun. 3. Paket ini tidak menyentuh soal keamanan (password plaintext, API tanpa autentikasi, CORS '*'). Pekerjaan terpisah. 4. Ikut disertakan untuk rujukan: BACA_DULU_v616.txt (changelog asli dari Anda) TABEL_IZIN_BYPASS_PENGECEKAN.sql (opsional, dari v549)