================================================================
PAKET MANDIRI — Digitalisasi_3_3  (v377, kumulatif)
FOLDER UTUH · tinggal rename yang lama, taruh yang ini
Disusun: 13 September 2026
================================================================

Folder ini SUDAH LENGKAP dan SUDAH DIUJI JALAN. Isinya:

   ✔ Kode terbaru      — dari "Digitalisasi_3_3 (18)"
   ✔ backend/node_modules — 117 paket, terpasang bersih di Linux
   ✔ frontend/dist     — sudah dibuild (77 berkas)
   ✔ 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 menyalin apa pun dari folder lama.


================================================================
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_v377.zip -d .

   Hasilnya langsung bernama "Digitalisasi_3_3" — tidak perlu
   diganti namanya lagi.

   Lewat cPanel File Manager: Rename folder lama, upload ZIP ini
   ke folder induk, klik kanan → Extract.

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.

SELESAI.

Folder "Digitalisasi_3_3_LAMA" biarkan dulu beberapa hari. Kalau
ada apa-apa, Anda tinggal balik: matikan backend, rename balik,
nyalakan lagi.


================================================================
SATU HAL YANG PERLU ANDA PUTUSKAN SENDIRI
================================================================

FOTO YANG DIUNGGAH SETELAH 13 AGUSTUS 2026.

66 foto di paket ini disalin dari ZIP server yang Anda kirim,
yaitu kondisi 13 Agustus. Kalau setelah tanggal itu ada operator
yang mengunggah foto BD / pengecekan / barang keluar, foto-foto
itu ada di folder LAMA, bukan di sini.

Aplikasi tetap jalan normal, hanya foto-foto baru itu yang muncul
rusak — record di database tetap utuh, cuma berkas gambarnya
tidak ketemu.

KALAU MEMANG ADA FOTO BARU, jalankan satu perintah ini di antara
langkah 3 dan 4:

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

  -n artinya "jangan timpa yang sudah ada", jadi perintah ini
  hanya menambah yang belum ada. Aman dijalankan, aman diulang.

Cara cepat memastikan perlu atau tidak:

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

  · hasilnya 66      → tidak ada foto baru, lewati saja
  · hasilnya  >66    → ada foto baru, jalankan perintah cp di atas

Hal yang sama berlaku untuk backend/.env — kalau Anda pernah
mengubahnya langsung di server setelah 13 Agustus (ganti password
database misalnya), bandingkan dulu:

      diff Digitalisasi_3_3_LAMA/backend/.env  Digitalisasi_3_3/backend/.env


================================================================
CATATAN JUJUR: node_modules DI SINI TIDAK 100% SAMA
================================================================

Isinya 117 paket, bukan 139 seperti di server Anda. Yang tidak
ikut HANYA dua kelompok, dan keduanya memang tidak dipakai:

  · @napi-rs/canvas (97 MB)
      Tiga berkas biner raksasa: versi Linux-glibc, Linux-musl,
      dan WINDOWS. Ikut terpasang sebagai bawaan pdfjs-dist.
      Fungsinya menggambar halaman PDF jadi gambar — dan kode
      Anda tidak pernah melakukan itu. Yang versi Windows jelas
      tidak berguna di server Linux.

  · nodemon + perkakas pengembangan (devDependencies)
      Hanya dipakai waktu `npm run dev` di laptop. Server pakai
      `npm start` / pm2, tidak menyentuhnya.

  · berkas *.map dan @types
      Peta sumber untuk debugging dan definisi TypeScript. Tidak
      pernah dibaca saat aplikasi berjalan.

Kenapa dibuang: dengan semuanya ikut, ZIP-nya 79 MB dan melewati
batas kirim 30 MB. Tanpa itu jadi 26 MB — dan tidak ada satu pun
baris kode Anda yang memanggilnya. Sudah saya periksa: kata
"pdfjs" hanya muncul di package.json, tidak di satu berkas kode
pun. Yang membaca PDF di aplikasi Anda adalah pdf2json, dan itu
IKUT di paket ini.

Kalau suatu saat Anda butuh lengkap kembali, cukup:
      cd Digitalisasi_3_3/backend && npm install


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

Saya jalankan `node server.js` memakai isi paket ini apa adanya:

  ✔ tidak ada "Cannot find module" — dependensi lengkap
  ✔ halaman SPA tersaji, memakai build baru
    (assets/index-BtqRQ_bh.js)
  ✔ foto uploads tersaji betulan:
    /uploads/bd/bd_1786752783092_h8t3x.jpeg → 200, 227.886 byte
  ✔ modul inti dicek satu per satu: multer, xlsx, pdf2json,
    mysql2, compression, cors, dotenv — semua OK
  ✔ 5 route diuji, semuanya TERDAFTAR (bukan 404):
    basis-perawatan · equipment-group · biaya-perawatan ·
    roster-organik · unit-scrap
  ✔ `node --check` lolos untuk seluruh berkas .js backend
  ✔ isi kode dibandingkan berkas-per-berkas dengan sumber Anda:
    identik


================================================================
ISI UPDATE — APA YANG BERUBAH
================================================================

FITUR / HALAMAN BARU (7 berkas baru):
  · backend/routes/biayaperawatan.js   + views/BiayaPerawatan.vue
  · backend/routes/rosterorganik.js    + views/RosterOrganik.vue
  · backend/routes/unitscrap.js
  · backend/utils/miripSOH.js
  · views/IzinBypassHM.vue
  · frontend/src/assets/responsive.css
  · backend/data/jadwal_nonorganik_seed.json

PERBAIKAN PENTING DI server.js:
  Dua route sudah lama ada berkasnya tapi TIDAK PERNAH didaftarkan,
  sehingga halaman "Basis Data Perawatan" selalu dibalas 404:
      /api/basis-perawatan
      /api/equipment-group
  Sekarang keduanya terdaftar. Ditambah 3 route baru di atas.

BERKAS YANG ISINYA DIPERBARUI: 44
  backend (14) : detailpart, hakedit, jadwalshift, kinerjaunit,
                 maintenancerecord, masterdata, masterpm,
                 pengecekanawal, progressperbaikan, sohgudangmsf,
                 sohgudangmsf1, sukucadang, server.js, .env.example
  frontend (30): App.vue, main.js, router/index.js, services/api.js,
                 DateTimePicker.vue, main.css, dark-theme.css, dan
                 22 halaman (MonitoringUnit, MasterData, SukuCadang,
                 TiketPerbaikan, KinerjaUnit, dll.)

Perubahan terakhir (v377): batas Durasi Delay kendala di
MonitoringUnit — kartu pertama dibatasi delay awal, kartu lanjutan
dibatasi durasi shift.

SAMPAH LAMA yang sudah TIDAK ikut:
  · backend/aichat.js            (duplikat usang routes/aichat.js)
  · views/TiketPerbaikan.vue.bak
  · aset build lama di dist/assets


================================================================
CATATAN TEKNIS
================================================================

1. frontend/node_modules tidak disertakan (server Anda memang
   tidak punya, dan dist sudah jadi). Baru perlu `npm install` di
   folder frontend kalau nanti mau `npm run build` di server.

2. frontend/.env.production masih:
        VITE_API_URL=http://50.6.7.38:3020/api
   Saya pertahankan apa adanya supaya perilakunya persis seperti
   yang sekarang jalan. Kalau nanti pakai domain atau HTTPS,
   ganti jadi  /api  lalu build ulang.

3. Paket ini TIDAK menyentuh soal keamanan (password plaintext,
   API tanpa autentikasi, CORS '*'). Pekerjaan terpisah yang butuh
   migrasi database — sengaja tidak dicampur ke sini.
