Kembali ke Proyek
Sistem Internal
PT. Nihon Seiki Indonesia

Sistem Warehouse Dinamis (Smart WH)

Sistem manajemen warehouse dengan alur kerja scan barcode/QR, pelacakan kapasitas rak real-time, dan penyesuaian stok.

CodeIgniter 4
PHP
MySQL
Bootstrap

Ringkasan

Sistem manajemen warehouse berbasis web yang dibangun untuk PT. Nihon Seiki Indonesia, dirancang untuk melacak penempatan material, status rak, dan alur barang masuk-keluar warehouse — semuanya lewat scan barcode/QR sederhana, bukan pencatatan manual di kertas.

Masalah

  • Pelacakan komponen mana yang disimpan di rak mana mengandalkan catatan manual yang cepat menjadi usang.
  • Rak bisa kelebihan muatan atau kehabisan ruang tanpa disadari, tanpa ada cara otomatis untuk menandainya.
  • Penghitungan stok (opname), retur, dan pelaporan masih berupa proses manual yang lambat.

Solusi

  • Scan untuk check-in: memindai barcode komponen otomatis menempatkannya di rak yang tersedia dengan ukuran yang sesuai, atau ke overflow storage jika rak utama penuh.
  • Scan untuk check-out: operator bisa memindai dan memproses banyak item dalam satu batch, tanpa perlu reload halaman.
  • Scan untuk penyesuaian stok: mencocokkan inventaris fisik dengan sistem cukup dengan satu scan per rak, langsung menampilkan item yang hilang atau lebih.
  • Penanganan retur untuk item yang perlu dikembalikan ke penyimpanan.
  • Dashboard berbasis role untuk QC, Delivery, Customer Service, dan Admin, masing-masing hanya melihat tools yang relevan dengan pekerjaannya.
  • Pelaporan: riwayat transaksi lengkap dan ekspor Excel satu klik untuk data rak, stok, dan audit.

Matriks Role

| Menu / Fitur | QC | Delivery | CS | Admin | | :--- | :---: | :---: | :---: | :---: | | Check-in (scan masuk) | ✅ | | | ✅ | | Check-out (scan keluar) | | ✅ | | ✅ | | Penyesuaian stok | | | ✅ | ✅ | | Master komponen / rak | | | ✅ | ✅ | | Retur | | | ✅ | ✅ | | Info rak, riwayat, pengguna | ✅ | ✅ | ✅ | ✅ |


Arsitektur & Alur Sistem

Login & Sesi

flowchart LR
    A[GET /login] --> B{Sesi sudah aktif?}
    B -- Ya --> C[Redirect ke /dashboard]
    B -- Tidak --> D[Tampilkan form login]
    D --> E[POST kredensial]
    E --> F{password_verify}
    F -- Cocok --> G[Set sesi, redirect ke dashboard]
    F -- Tidak cocok --> H[Tampilkan error, redirect kembali]

Check-in (barang diterima)

Input berupa satu string hasil scan barcode/QR dengan format partNumber,lot,quantity,uniqueScanId.

flowchart TD
    A[Scan barcode/QR] --> B{Format 4-bagian valid?}
    B -- Tidak --> Z1[Gagal: scan ulang]
    B -- Ya --> C{Part number terdaftar?}
    C -- Tidak --> Z2[Gagal: part tidak dikenal]
    C -- Ya --> D{Sudah check-in sebelumnya?}
    D -- Ya --> Z3[Gagal: scan duplikat]
    D -- Tidak --> E{Part punya rak aktif?}
    E -- Tidak --> F[Cari rak kosong sesuai ukuran part]
    F --> G{Rak kosong ditemukan?}
    G -- Tidak --> H[Fallback ke Over Area]
    G -- Ya --> I[Gunakan rak tersebut]
    E -- Ya --> J{Rak yang ada masih punya kapasitas?}
    J -- Ya --> I
    J -- Tidak --> H
    I --> K[Insert transaksi: status=checkin]
    H --> K
    K --> L[Update kapasitas & status rak]
    L --> M[Tambahkan event ke log riwayat transaksi]
    M --> N[Berhasil: part ditempatkan di rak]

Check-out (barang dikirim)

Check-out bersifat AJAX-only — operator memindai banyak item di sisi client sebelum mengirim seluruh batch sebagai satu request.

flowchart TD
    A[Scan banyak item di sisi client] --> B[POST array JSON via AJAX]
    B --> C[Loop tiap item]
    C --> D{Sedang check-in?}
    D -- Tidak --> E[Lewati item]
    D -- Ya --> F[Kurangi kapasitas rak, update status]
    F --> G[Tambahkan event ke log riwayat transaksi]
    G --> H[Update transaksi: status=checkout]
    H --> I[Item berikutnya]
    I --> C

Model Data (ERD)

erDiagram
    RACK ||--o{ TRANSACTION : menyimpan
    PART ||--o{ TRANSACTION : "jenis item"
    USER {
        int id PK
        varchar username
        varchar password "hashed"
        enum role "QC|Delivery|CS|Admin"
    }
    PIC {
        int id PK
        varchar name
        enum department "CS|QC|Delivery"
    }
    RACK {
        int id PK
        varchar code
        enum rack_type "Large|Small|Over Area"
        enum status "Empty|Filled|Full"
        int total_packing
    }
    PART {
        int id PK
        varchar part_number
        int max_capacity
        enum rack_type "Large|Small"
    }
    TRANSACTION {
        int id PK
        int part_id FK
        int rack_id FK
        varchar unique_scan_id
        varchar lot
        int quantity
        enum status "checkin|checkout|adjust_in|adjust_out"
        varchar pic
        datetime checked_in_at
        datetime checked_out_at
    }
    TRANSACTION_HISTORY {
        int id PK
        json event_snapshot "audit log, not FK-linked"
    }

status adalah state machine inti aplikasi ini: checkin → checkout → (retur) kembali ke checkin, dengan adjust_in/adjust_out sebagai varian yang dihasilkan oleh alur stock-opname (penyesuaian). TRANSACTION_HISTORY tidak bersifat relasional — setiap event check-in/out/adjustment/retur ditambahkan sebagai snapshot JSON, yang menjadi dasar halaman History tanpa perlu join yang berat.

Dampak Utama

  • Menggantikan pelacakan rak manual dengan visibilitas real-time berbasis scan atas stok warehouse.
  • Memangkas waktu yang dibutuhkan untuk stock opname (penghitungan fisik) dari rekonsiliasi manual menjadi satu kali proses scan.
  • Memberi setiap role dashboard yang disesuaikan dengan tanggung jawabnya, mengurangi waktu training untuk staf baru.
Tangkapan Layar
Sistem Warehouse Dinamis (Smart WH) — screenshot 1
Sistem Warehouse Dinamis (Smart WH) — screenshot 2