================================================================
PAKET MANDIRI — Digitalisasi_3_3  v551
memuat v549 (Izin Bypass Pengecekan Awal) + v551 (cocok nama part)
Disusun: 14 September 2026
================================================================

Folder ini SUDAH LENGKAP dan SUDAH DIUJI JALAN:

   ✔ Kode v549 + v551    — keduanya sudah diterapkan
   ✔ backend/node_modules — 117 paket, terpasang bersih di Linux
   ✔ frontend/dist       — SUDAH DIBUILD ULANG untuk v551
   ✔ backend/uploads     — 66 foto asli dari server
   ✔ backend/.env        — setelan server (DB_HOST=localhost)

Tidak perlu npm install. Tidak perlu npm run build.
Tidak perlu menjalankan SQL (tabelnya dibuat sendiri).

CATATAN PENTING: kalau paket v549 kemarin BELUM Anda pasang, paket
ini sudah memuatnya — tidak perlu memasang dua-duanya. Kalau v549
SUDAH terpasang, paket ini tinggal menimpanya seperti biasa.


================================================================
!!! BACA INI KALAU v549 BELUM PERNAH TERPASANG !!!
================================================================

SETELAH v549 AKTIF, UNTUK SEMENTARA TIDAK ADA SATU PUN BD YANG
BISA DITUTUP TANPA PENGECEKAN AWAL LENGKAP — TERMASUK OLEH AKUN
31196.

Itu bukan kerusakan. Daftar unit yang diizinkan memang BERAWAL
KOSONG, dan itulah arti "izin per unit": sebelumnya wewenang itu
melekat pada ORANG, sekarang melekat pada UNIT.

Gejalanya terlihat persis seperti fitur yang rusak — tombol
"Simpan & Close" mati di layar yang kemarin masih bisa dipakai.

Kerjakan DUA LANGKAH WAJIB di bawah segera setelah backend nyala.

(Kalau v549 sudah terpasang dan unitnya sudah didaftarkan,
abaikan bagian ini — pengaturannya tersimpan di database, tidak
ikut tersapu oleh pemasangan paket ini.)


================================================================
LANGKAH PASANG — 4 LANGKAH
================================================================

1. MATIKAN BACKEND
      pm2 stop all

2. GANTI NAMA FOLDER LAMA   (jangan dihapus)
      cd /path/ke/folder/induk
      mv Digitalisasi_3_3  Digitalisasi_3_3_LAMA

3. EXTRACT PAKET INI
      unzip -o Digitalisasi_3_3_MANDIRI_v551.zip -d .

   Hasilnya langsung bernama "Digitalisasi_3_3".

4. NYALAKAN
      cd Digitalisasi_3_3/backend
      pm2 start server.js --name digitalisasi

   CEK:  http://50.6.7.38:3020/api/health
   harus muncul:  {"success":true, ... "db":"terhubung"}

   Lalu buka aplikasi, tekan Ctrl+Shift+R.


================================================================
DUA LANGKAH WAJIB  (hanya bila v549 baru pertama kali dipasang)
================================================================

A. BERI HAKNYA
   Master Data > Hak Akses Menu
   Cari baris:  🦺 Tutup BD tanpa Pengecekan Awal lengkap

   Bawaannya TERTUTUP untuk semua jenis akun — disengaja, karena
   yang dilewati ini bukan kesalahan pencatatan melainkan bukti
   keselamatan. NIK 31196 tidak perlu saklar ini, sudah otomatis.

   KEPUTUSAN ANDA: Supervisor ikut diberi, atau cukup akun
   berakses penuh saja seperti perilaku sebelumnya.

B. DAFTARKAN UNITNYA
   Master Data > Izin Bypass Pengecekan Awal   (menu baru,
   hanya muncul untuk akun berakses penuh)

   · MENYIMPAN ITU MENYAMAKAN, BUKAN MENAMBAHKAN. Unit yang
     centangnya dilepas akan DICABUT izinnya. Layarnya menampilkan
     "N akan DICABUT izinnya" sebelum Anda menekan Simpan.
   · ISI "BERLAKU SAMPAI" KALAU BISA. Dikosongkan = tanpa batas
     waktu, dan tidak ada layar yang menampilkan izin yang lupa
     ditutup. Kueri untuk mencarinya ada di
     TABEL_IZIN_BYPASS_PENGECEKAN.sql di folder ini.


================================================================
KALAU ADA FOTO BARU DI SERVER
================================================================

66 foto di paket ini kondisi 13 Agustus. Cek dulu:

      find Digitalisasi_3_3_LAMA/backend/uploads -type f | wc -l

  · hasilnya 66   → lewati
  · lebih dari 66 → jalankan sebelum langkah 4:

      cp -rn Digitalisasi_3_3_LAMA/backend/uploads/*  \
             Digitalisasi_3_3/backend/uploads/


================================================================
YANG BARU DI v551 — 2 BERKAS
================================================================

  backend/routes/detailpart.js          endpoint baru + perbaikan impor
  frontend/src/views/MonitoringUnit.vue pencocokan nama + tampilannya

MASALAH YANG DIPERBAIKI:
Seluruh pencarian stok berpatokan pada Part Number saja. Baris tanpa
Part Number melewati SELURUH pengecekan gudang, lalu jatuh ke
'Waiting Part' — bukan karena stoknya habis, tapi karena tidak
pernah dicek sama sekali. "TIDAK DICEK" dan "dicek, ternyata habis"
berakhir di tempat yang sama persis, padahal nama part ada kolomnya
di ketiga tabel SOH.

Akibatnya menular: baris seperti itu ikut terhitung sebagai part
yang menunggu, dan sinkronRekap() menarik SELURUH record ke
Status_Penggunaan = 'Waiting Part'.

SEKARANG: part yang hanya punya nama dicocokkan ke SOH lewat
namanya. Yang cocok persis, Part Number-nya terisi sendiri dengan
keterangan "✓ diisi dari nama part". Yang mirip-mirip muncul
sebagai chip "🔎 N part mirip namanya — pilih".

Endpoint baru: POST /api/detail-part/cek-stok-nama

UJI SESUDAH PASANG (pakai record SE-3004 di layar Anda):
  Buka Edit Kebutuhan Sparepart. Baris "Hose AC Split Low" dan
  "Clamp hose gbagong" TIDAK boleh lagi bertuliskan "⏳ Waiting".

v551 tidak bersinggungan dengan v549 — tidak ada perubahan
struktur tabel, dan kedua berkasnya tidak saling menyentuh.


================================================================
SUDAH DIUJI DI SINI — paket ini, bukan versi lain
================================================================

  ✔ `node --check` lolos untuk seluruh berkas .js backend
  ✔ `vite build` berhasil — dist DIBANGUN ULANG, 79 berkas,
    index.html menunjuk assets/index-tgrNARsN.js
    (v549 menunjuk index-BzVcdsVL.js, v548 index-DuTBFFcL.js —
     jadi Anda bisa memastikan sendiri build-nya memang baru)
  ✔ Endpoint BARU v551 hidup:
    POST /api/detail-part/cek-stok-nama → 200
  ✔ Endpoint v549 MASIH hidup, tidak tersapu:
    /api/master-data/bypass-pengecekan/daftar → terdaftar
  ✔ Layar v549 IzinBypassPengecekan.vue masih ada dan ikut
    ter-build
  ✔ `node server.js` dijalankan memakai isi paket ini apa adanya:
    tidak ada "Cannot find module", SPA tersaji memakai build baru,
    foto uploads /uploads/bd/bd_1786752783092_h8t3x.jpeg → 200,
    227.886 byte
  ✔ 2 berkas v551 dibandingkan byte-per-byte sesudah ditimpa: cocok
  ✔ backend/.env dipastikan masih versi server (DB_HOST=localhost)

SAMPAH DARI ARSIP ANDA YANG SENGAJA TIDAK IKUT:
  · backend/aichat.js            duplikat usang routes/aichat.js
  · backend/routes/pr.js.tmp     berkas sementara
  · views/TiketPerbaikan.vue.bak cadangan lama


================================================================
CATATAN TEKNIS  (sama seperti paket sebelumnya)
================================================================

1. node_modules berisi 117 paket, bukan 139. Yang tidak ikut:
   @napi-rs/canvas (97 MB biner Linux-glibc/musl/WINDOWS, bawaan
   pdfjs-dist yang tidak pernah dipanggil kode Anda), nodemon,
   berkas *.map dan @types. Kalau suatu saat butuh lengkap:
        cd Digitalisasi_3_3/backend && npm install

2. frontend/node_modules tidak disertakan — dist sudah jadi.

3. 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.

4. Paket ini tidak menyentuh soal keamanan (password plaintext,
   API tanpa autentikasi, CORS '*'). Pekerjaan terpisah.

5. Changelog asli dari Anda ikut disertakan untuk rujukan:
   BACA_DULU_v549.txt dan BACA_DULU_v551.txt
