Mulai dari sini — pemasangan baru Universal ERP V6

Panduan ini untuk Anda yang belum menginstal versi apa pun. Gunakan paket V6 ini saja. Tidak perlu memasang V1/V2/V3/V4/V5 atau menjalankan file migrasi secara terpisah.

Yang sudah tersedia

Gudang, lantai dan hosting cadangan V6

Untuk dua gudang Anda, mulai dengan satu aplikasi/database aktif. Semua komputer memilih lokasi kerja masing-masing pada bagian atas. Tidak perlu membeli komputer tambahan untuk fitur multi-gudang online ini.

  1. OWNER membuka Gudang, Lantai & Transfer. Edit nama Gudang Utama bila diperlukan, tambahkan gudang kedua, kemudian buat lokasi lantai/rak dengan kode unik (contoh A-L1, A-L2, B-L1). Kode dan induk lokasi permanen; nama lantai/rak dapat diperbarui.
  2. Atur Akses lokasi karyawan, lalu izin menu melalui Karyawan & Akses. STAFF lama dan STAFF baru mulai di lokasi 1; sesuaikan sebelum digunakan. OWNER mengakses semua lokasi. Perubahan akses mengharuskan login ulang.
  3. Pilih satu lokasi kerja sebelum masuk barang, opname atau membuat paket. Pilihan Semua lokasi hanya untuk melihat saldo gabungan. Antrean harus selesai sebelum mengganti lokasi; setiap request menyimpan lokasi saat ditangkap.
  4. Lokasi baru mulai nol. Isi stok fisik awal memakai Opname → OPENING pada lokasi/varian yang belum mempunyai histori. Migrasi menempatkan stok lama di lokasi 1; jangan menyalin jumlah lama ke tiap gudang. Bila barang yang sama sudah tercatat di asal dan dipindah fisik, gunakan transfer.
  5. Transfer: buat draft dengan sumber/tujuan dan SKU/jumlah, kemudian konfirmasi kirim saat barang keluar. Barang menjadi dalam perjalanan. Petugas berizin di tujuan mengonfirmasi penerimaan penuh satu kali. Transfer bukan penjualan, tidak menghasilkan insentif packing. Penerimaan parsial atau klaim kehilangan transfer belum mempunyai alur khusus.
  6. Paket keluar menyimpan lokasi asal sejak dibuat. Retur mempunyai pilihan lokasi pemeriksaan/tujuan restock tersendiri di form; hanya barang layak jual masuk lokasi itu. OWNER bisa mencari penjualan pada Semua lokasi lalu memilih lokasi pemeriksaan tanpa mengganti tampilan di tengah draft.
  7. Stok, opname, paket, retur dan laporan mutasi mengikuti lokasi yang diizinkan. Master SKU bersama seluruh gudang. Keuangan, payroll/HR dan grafik finansial tetap konsolidasi perusahaan bagi akun yang mendapat izin; bukan laporan laba-rugi mandiri per lantai. Ambang minimum stok masih setelan per varian.

Untuk rencana Namecheap utama, GoDaddy cadangan, Hostinger cadangan tambahan, baca PEMULIHAN-HOSTING.md. Paket menyediakan pengiriman backup terenkripsi dan mode STANDBY, tetapi tidak menyediakan replikasi/failover otomatis. Membeli tiga hosting saja belum membuat aplikasi selalu dapat diakses. Provider, DNS, HTTPS, secret, cron, arsip terbaru, fencing dan pemulihan nyata harus disiapkan serta diuji. Jangan membuka tiga database untuk transaksi bersamaan. FORM-GANGGUAN.html bisa dicetak untuk pencatatan sementara.

SKU dan label barcode V5

Barcode adalah gambar garis yang dibaca scanner; SKU/kode varian adalah nilai yang dipakai aplikasi untuk mengenali barang. Dalam aplikasi ini satu kolom barcode_sku menjadi kode scan utama varian.

Alur internal V4 yang disarankan

Aplikasi ini tidak mengirim atau menarik stok dari Shopee/BigSeller. Resi dan nomor pesanan dimasukkan sendiri. Audit kecocokan isi dan harga dilakukan manual terhadap akun marketplace.

  1. Barang datang: menu Continuous Scan → Barang masuk → scan SKU berakhiran Enter. Setiap scan sukses = 1 pcs. Saldo awal banyak barang dapat diisi lewat Opname → OPENING khusus saldo varian di lokasi tanpa histori.
  2. Pesanan keluar: buka Packing Paket → scan/isi resi unik dan nomor pesanan opsional → Buat draft. Scan SKU setiap barang; kolom langsung kosong dan fokus kembali, antrean dikirim berurutan. Gunakan Kurangi 1 bila salah scan.
  3. Cocokkan isi draft dengan pesanan Shopee secara manual. Klik Selesaikan Paket dan lakukan dua konfirmasi. Semua stok, penjualan dan insentif dicatat dalam satu transaksi. Bila salah satu SKU kurang, seluruh penyelesaian dibatalkan; draft tetap ada untuk diperbaiki.
  4. Draft belum memesan/mengurangi stok. Dua draft dapat memuat stok yang sama; stok diperiksa lagi saat selesai. Maksimal 500 pcs per paket. Draft dan isinya tersimpan di server; antrean yang belum pasti disimpan per tab/browser dan perlu diulang dengan tombol retry yang sama. Jangan menghapus data browser saat antrean masih ada. Scan yang dipastikan ditolak dapat dilewati dengan konfirmasi; request yang belum pasti tidak boleh dilewati.
  5. Resi unik termasuk draft yang dibatalkan; untuk koreksi gunakan referensi pengganti yang jelas dan simpan hubungannya di catatan audit operasional. Paket selesai tidak diedit/dihapus. Pembatalan draft tidak memengaruhi stok; paket selesai yang secara fisik kembali diproses melalui Retur.
  6. Retur: cari transaksi asal dengan resi dan SKU. Periksa barang; pilih RESTOCK untuk layak jual atau DAMAGED untuk rusak pada tiap baris. Saat retur diselesaikan, hanya RESTOCK masuk stok jual. DAMAGED tetap tercatat dalam rincian retur, dipisahkan fisik ke area barang rusak; bukan persediaan jual. Rekap bulanan menampilkan pcs layak jual dan rusak yang selesai ditangani pada bulan itu. Pelacakan perbaikan/pembuangan barang rusak belum menjadi modul tersendiri.
  7. Akses: OWNER → Karyawan & Akses → pengaturan izin. Berikan Packing & audit paket untuk petugas packing. STAFF hanya melihat/mengubah paket miliknya; OWNER melihat semua. Scan OUT langsung adalah mode lama dengan izin khusus direct_out dan scan_out; jangan berikan bila ingin seluruh penjualan melewati paket. Preset gudang memakai alur paket dan tidak memberi direct_out. Akun dengan izin eksplisit dari versi lama perlu diberi packing oleh OWNER.
  8. Cetak: Keuangan Bulanan → pilih bulan/dasar biaya → Cetak ringkasan / Simpan PDF. Browser membuka dialog cetak. Isi paket dapat dicetak, dan daftar SKU halaman inventaris juga dapat dicetak. Tombol Cetak barcode per varian kini menyediakan gambar barcode; daftar SKU halaman tetap berupa tabel teks. CSV rincian masih tersedia per halaman sebagaimana label tombol.
  9. SKU: barcode_sku adalah kode unik tiap varian, misalnya PHL-LED-5W, PHL-LED-10W, SKATE-S dan SKATE-M. Boleh mengikuti kode varian marketplace asalkan unik dalam sistem. Scanner harus membaca kode yang persis sama; jika label fisik memakai EAN lain, tetapkan EAN itu sebagai barcode_sku. Alias banyak barcode per varian belum tersedia. Mulai V5, SKU permanen sejak dibuat; buat varian baru untuk identitas baru.

Harga jual dan biaya memakai snapshot katalog saat paket diselesaikan, bukan harga/fee otomatis dari Shopee. Diskon, subsidi dan perbedaan pencairan marketplace perlu diaudit manual; laporan ini belum rekonsiliasi per-pesanan otomatis. Insentif OUT diberikan kepada akun yang menyelesaikan paket; jika OWNER menyelesaikan draft STAFF, transaksi mencatat OWNER sebagai penyelesai, bukan mengatasnamakan STAFF.

Pilih cara memulai

A. Operasional sungguhan — disarankan: impor schema.sql saja. Buat OWNER Anda sendiri melalui setup.php. Database dimulai kosong, tanpa akun atau penjualan contoh.

B. Belajar/demonstrasi: buat database TERPISAH, impor schema.sql, lalu demo.sql. Login owner dengan DemoERP2026!Change, kemudian ganti password saat diminta. Setup otomatis tertutup karena owner demo sudah ada. Jangan menggunakan database demo untuk pembukuan usaha sungguhan.

Urutan pemasangan lewat cPanel

1. Siapkan hosting dan HTTPS

Masuk akun NameCheap → hosting → cPanel. Pastikan domain membuka halaman HTTPS dengan sertifikat valid. Pada menu versi PHP yang tersedia di hosting Anda, pilih PHP 8.3 atau lebih baru yang masih didukung, dengan PDO/pdo_mysql aktif. Minimum aplikasi PHP 8.1 64 bit. Nama menu bisa berbeda menurut paket; dokumentasi resmi ada di bagian akhir.

2. Buat database dan penggunanya

Buka Manage My Databases / MySQL Databases atau Database Wizard:

  1. Buat satu database kosong, misalnya suffix erp.
  2. Buat user database dengan password kuat.
  3. Tambahkan user tersebut ke database dan beri izin yang diperlukan untuk impor skema. Setelah instalasi, akun aplikasi cukup memakai SELECT, INSERT, UPDATE dan DELETE bila panel mendukung pemisahan izin.
  4. Catat nama database dan user lengkap dengan prefix cPanel, misalnya namaakun_erp. Simpan password secara pribadi.

3. Unggah aplikasi

Buka File Manager → public_html, unggah ZIP, lalu Extract. Paket menghasilkan folder universal-erp. Anda dapat mengganti nama folder itu menjadi erp, sehingga alamat aplikasi menjadi:

https://domain-anda/erp/

Di dalam folder tersebut harus ada index.php, api.php, db.php, setup.php, folder assets dan folder modules. Pertahankan file proteksi Apache yang ikut dalam paket. Jangan menghapus folder modules: aplikasi memerlukannya.

Setelah ekstraksi, hapus ZIP unggahan dari folder publik agar source tidak dapat diunduh lewat URL. Simpan paket asli di komputer Anda.

4. Impor satu file skema

Buka phpMyAdmin, klik database ERP kosong di sidebar, pilih Import, lalu pilih schema.sql dari paket yang diekstrak di komputer Anda dan jalankan impor. Pastikan tidak ada pesan gagal.

Untuk jalur A produksi, berhenti di sini: jangan impor demo.sql. Skema terbaru sudah berisi seluruh perubahan V1–V6.

5. Isi konfigurasi

Di File Manager, salin config.example.php menjadi config.php, lalu Edit. Isi:

KunciIsinya
instance_idprimary pada server utama; ID unik lain pada tiap cadangan
server_roleACTIVE pada utama; STANDBY pada cadangan
hostHost database dari hosting, umumnya localhost; gunakan informasi akun Anda
portPort database, umumnya 3306
databaseNama database lengkap termasuk prefix
usernameNama user database lengkap termasuk prefix
passwordPassword user database, bukan password login aplikasi
timezoneZona usaha: Asia/Jakarta, Asia/Makassar, Asia/Jayapura, atau yang sesuai
https_onlyTetap true pada hosting
login_secretSecret acak 64 karakter hex
setup_tokenSecret acak LAIN, digunakan untuk membuat owner pertama
backup_dirFolder privat di luar public_html, contoh /home/NAMA_CPANEL/erp-private/backups

Untuk mendapatkan dua secret acak tanpa terminal, buka https://domain-anda/erp/setup.php saat konfigurasi belum siap. Halaman tersebut menampilkan dua contoh nilai acak baru untuk Anda salin ke login_secret dan setup_token. Nilai berbeda setiap pemuatan halaman, jadi simpan nilai yang Anda pilih secara pribadi. Setelah konfigurasi valid, halaman tidak menampilkan secret konfigurasi Anda lagi.

Jangan mengubah kutip, koma atau struktur PHP pada file contoh. Password yang mengandung kutip tunggal/backslash perlu di-escape sesuai sintaks string PHP; gunakan bantuan administrator bila ragu. Jangan menaruh kredensial di file .txt publik.

Lebih baik simpan config asli di luar webroot dan ubah path fallback di db.php atau set ERP_CONFIG_PATH. Untuk pemasangan awal, config.php dalam folder aplikasi juga dilindungi aturan Apache, tetapi tetap pastikan akses langsungnya ditolak.

6. Buat OWNER Anda

Muat ulang /erp/setup.php. Jika konfigurasi dan skema sudah benar, formulir owner pertama muncul:

  1. Isi kunci pemasangan dengan nilai setup_token yang tadi Anda simpan.
  2. Pilih username owner dan password baru minimal 12, maksimal 72 byte.
  3. Ulangi password lalu simpan.
  4. Setelah berhasil, halaman setup otomatis terkunci karena sudah ada OWNER.
  5. Buka halaman login dan gunakan akun baru tersebut. Tidak ada password produksi bawaan.

Anda tidak perlu menginstal Node.js, Composer, Bootstrap, Tailwind, Redis atau framework backend pada hosting. Asset frontend yang diperlukan sudah ada di paket.

7. Siapkan data usaha sebelum transaksi

  1. Tambahkan produk induk dan varian. Isi barcode persis sama dengan label barang, isi dus, modal/jual, tarif admin, iklan/packing per pcs, serta stok minimum.
  2. Untuk stok yang sudah ada sebelum menggunakan ERP, gunakan tombol Opname → Saldo awal varian baru. Masukkan jumlah pcs sebenarnya. Ini hanya berlaku bagi varian yang belum memiliki histori.
  3. Catat pembelian/pengeluaran kas yang benar-benar terjadi pada buku kas; saldo awal stok tidak otomatis berarti uang keluar hari ini.
  4. Tambahkan karyawan, gaji per periode, insentif, dan atur akses lewat Akses menu. Password sementara harus diganti saat login pertama.
  5. Uji barang masuk dan keluar dengan scanner, termasuk barcode tidak dikenal dan stok habis, pada lingkungan latihan terlebih dahulu.
  6. Periksa seluruh tarif dan rumus dengan contoh transaksi usaha Anda sebelum mengandalkan laporan.

8. Rutinitas pemakaian

Backup dan pemeriksaan sebelum operasional

Tersedia tools/check.php, tools/reconcile.php dan tools/backup.php untuk terminal/cron. Tool tersebut bukan halaman browser dan akses HTTP langsungnya diblokir.

Jika hosting menyediakan terminal dengan PHP CLI yang sesuai, administrator dapat menjalankan:

php /home/NAMA_CPANEL/public_html/erp/tools/check.php
php /home/NAMA_CPANEL/public_html/erp/tools/reconcile.php
php /home/NAMA_CPANEL/public_html/erp/tools/backup.php

php pada contoh adalah placeholder executable CLI yang harus cocok dengan versi aplikasi. Minta path PHP CLI dari dukungan hosting bila versi terminal berbeda dengan versi domain. Set ERP_CONFIG_PATH jika konfigurasi dipindahkan.

Backup menulis .sql.gz dan checksum ke backup_dir privat. Pembacaan data memakai snapshot konsisten dan streaming, bukan memuat seluruh database sekaligus ke RAM. Skrip belum terjadwal otomatis; administrator dapat menghubungkannya ke Cron Jobs pada jam sepi atau memakai fasilitas backup cPanel. Tidak ada backup lama yang dihapus otomatis.

Simpan juga konfigurasi dan salinan aplikasi secara privat. Salin backup keluar dari akun hosting secara berkala; salinan pada server yang sama tidak cukup jika akun/server hilang. Awasi ruang disk dan tetapkan retensi sesuai kebutuhan, misalnya mempertahankan beberapa backup terbaru serta salinan mingguan di tempat lain. Uji pemulihan ke database kosong terpisah sebelum dipakai sungguhan. File backup berisi data gaji dan hash password, sehingga tidak boleh berada dalam folder publik.

Sebelum operasional, pastikan: HTTPS aktif; konfigurasi/SQL/folder internal tidak dapat diakses lewat URL; akun demo tidak dipakai; backup dapat dipulihkan; hak staff sesuai; scan fisik diuji; dan resource hosting dipantau. Ini pemeriksaan penerimaan praktis, bukan jaminan aplikasi tanpa bug.

Yang perlu diketahui agar angka tidak menyesatkan

Jika muncul kendala

GejalaPeriksa
Halaman belum siap / setup 503Kredensial config, kedua secret, PHP/pdo_mysql, dan impor schema.sql
Ditolak karena HTTPSGunakan alamat https dan periksa sertifikat/proxy hosting
Login demo tidak bisa dipakai pada jalur produksiMemang tidak ada akun demo; buat owner melalui setup.php
Akses staff berubah lalu sesi berakhirNormal; login ulang untuk memakai izin terbaru
Request scan belum pastiJangan tembak ulang barang sebagai request baru; gunakan tombol retry yang sama
Opname ditolak karena saldo berubahMuat ulang inventaris dan hitung ulang stok setelah aktivitas scan berhenti
Grafik keuangan kosong pada staffPeriksa izin keuangan dan dashboard; jangan memberikan akses finansial hanya untuk menampilkan grafik stok
Backup gagalPeriksa path privat, izin tulis, gzip dan PHP CLI; gunakan backup cPanel sementara

Dokumentasi resmi hosting

Panduan rinci finansial/retur/izin juga ada pada UPGRADE-V2.md. Dokumen tersebut memuat informasi fitur, tetapi Anda tidak perlu melakukan migrasi V2 karena pemasangan pertama memakai schema.sql terbaru.