🚀 LSM Web Portal

Flow Aplikasi & Dokumentasi Sistem

Laporan Stok Malam - Bakmi GM

🎯 Gambaran Umum Aplikasi

Tujuan Aplikasi

LSM (Laporan Stok Malam) Web Portal adalah sistem manajemen inventori restoran yang mengotomatisasi:

📝 Pencatatan Stok

Menggantikan proses manual Excel dengan sistem web yang terintegrasi

🧮 Perhitungan SPB

Auto-calculate kebutuhan pemesanan barang berdasarkan forecast

🚚 Delivery Order

Generate DO untuk integrasi dengan sistem ERP (QAD)

📊 Pelaporan

Monitoring dan reporting stok real-time untuk semua cabang

Pengguna Sistem

Role Tanggung Jawab Akses
Staff Store Input stok harian, kelola SPB Store sendiri
Store Manager Approve transaksi, set TSM Store sendiri
SSM Review forecast, monitor multi-store Multiple stores
SDP/HO Maintain master data, upload forecast All stores
PPIC Validasi order, monitor pengiriman All stores

🔄 Flow Proses Bisnis Utama

1️⃣ Setup Master Data (Dilakukan oleh SDP/HO)

┌─────────────────────────────────────────────────────────┐
│ MASTER DATA SETUP                                       │
├─────────────────────────────────────────────────────────┤
│ 1. Upload dari QAD (via Excel):                        │
│    • Stores (Cabang Restoran) - Upload Excel           │
│    • Menus (Menu Restoran) - Upload Excel              │
│    • Raw Materials/Items (Bahan Baku) - Upload Excel   │
│    • Item Conversions (Konversi Satuan) - Upload Excel │
│                                                         │
│ 2. Setup Manual di LSM:                                 │
│    • Range DOI (Days of Inventory)                     │
│    • FSTR (Formula/Resep Masakan)                      │
│    • Reason Adjustments (Alasan Penyesuaian)          │
│    • Shipment Deliveries (Jadwal Pengiriman)          │
│    • Holidays (Hari Libur)                             │
│    • Tipe Dokumen per Item (DO/PO/PR)                  │
└─────────────────────────────────────────────────────────┘
                

2️⃣ Upload & Review Forecast (Bulanan)

Step 1: SDP/HO Upload Forecast
   • Upload file Excel berisi forecast penjualan
   • Data forecast per store, per item, per hari
        ↓
Step 2: SSM Review & Adjust
   • Review forecast yang di-upload
   • Sesuaikan dengan kondisi aktual
        ↓
Step 3: SM Set Target Sisa Malam (TSM)
   • Tentukan target stok yang harus tersisa
   • TSM = buffer stock untuk operasional
                

3️⃣ Proses Harian - Stock Opname (Setiap Malam)

Waktu: Setiap malam setelah tutup operasional
PIC: Staff Store

Step 1: Buat Stock Opname Baru
   • Pilih tanggal SO (hari H)
   • Sistem auto-load semua item untuk store
        ↓
Step 2: Input Stok Fisik
   • Input Qty Utuh (kemasan utuh)
   • Input Qty Pakai (kemasan terbuka/terpakai)
   • Sistem auto-convert ke satuan standar
        ↓
Step 3: Sistem Hitung Ending Stock
   Formula:
   Ending Stock = (Qty Utuh × Conversion) + Qty Pakai
        ↓
Step 4: Save & Submit
   • Save: Simpan sebagai Draft (bisa edit)
   • Submit: Lock data, siap generate SPB
                
⚠️ ATURAN PENTING:
  • Input hanya boleh hari H (tidak boleh backdate)
  • Edit window: sampai jam 11:00 H+1
  • Setelah submit, data tidak bisa diubah

4️⃣ Generate SPB (Surat Permintaan Barang)

Trigger: Setelah SO di-submit
PIC: Staff Store / Store Manager

Step 1: Sistem Hitung Kebutuhan
   Formula SPB:
   Suggested Qty = (Forecast - Ending Stock) + TSM
   
   Dimana:
   • Forecast = Proyeksi penjualan dari forecast
   • Ending Stock = Hasil SO malam sebelumnya
   • TSM = Target Sisa Malam (buffer stock)
        ↓
Step 2: Review & Adjustment
   • Review suggested qty dari sistem
   • Adjust qty jika perlu (dengan alasan)
   • Sistem tampilkan alert:
     - Forecast Alert (variance vs forecast)
     - DOI Status (Critical/Normal/Safe)
        ↓
Step 3: Finalisasi SPB
   • Final Qty = Suggested Qty + Adjusted Qty
   • Generate SPB Number (auto)
   • Status: Draft → Submitted → Approved
                
📊 JENIS SPB:
  • SPB Regular Pemesanan rutin harian
  • SPB Tambahan Pemesanan di luar regular
  • SPB Batalan Pembatalan/perubahan SPB

5️⃣ Generate Delivery Order (DO)

Trigger: Setelah SPB Approved
PIC: PPIC / Store Manager

Step 1: Generate DO dari SPB
   • Pilih SPB yang sudah approved
   • Sistem create DO dengan detail items
        ↓
Step 2: Generate CSV File
   • Sistem export DO ke format CSV
   • Format sesuai requirement ERP (QAD)
        ↓
Step 3: Kirim ke ERP
   • Upload CSV ke sistem QAD
   • QAD proses untuk pengiriman barang
        ↓
Step 4: Mark as Sent
   • Update status DO: Generated → Sent
   • Tracking untuk monitoring pengiriman
                

Flow Diagram Lengkap

┌──────────────┐
│ MASTER DATA  │ ← Upload Excel dari QAD (Stores, Menus, Items)
│   SETUP      │ ← Setup Manual (DOI, FSTR, Schedules)
│              │ ← Set tipe_dokumen per item (DO/PO/PR)
└──────┬───────┘
       │
       ↓
┌──────────────┐
│   FORECAST   │ ← Upload Excel (SDP/HO)
│  MANAGEMENT  │ ← Review & Adjust (SSM)
│              │ ← Set TSM (SM)
└──────┬───────┘
       │
       ↓
┌──────────────┐
│ STOCK OPNAME │ ← Input Qty Utuh & Pakai (Staff Store)
│   (MALAM)    │ ← Auto Convert & Calculate
│              │ ← Submit (Lock Data)
└──────┬───────┘
       │
       ↓
┌──────────────┐
│ GENERATE SPB │ ← Auto Calculate: (Forecast - SO) + TSM
│              │ ← Review & Adjust (SM)
│              │ ← Submit & Approve
└──────┬───────┘
       │
       ↓
┌──────────────────────────────────────────────┐
│ GENERATE CSV (Group by tipe_dokumen)        │
├──────────────────────────────────────────────┤
│                                              │
│  ┌─────────────┐  ┌─────────────┐  ┌──────┐│
│  │  CSV DO     │  │  CSV PO     │  │ CSV  ││
│  │  (Warehouse)│  │  (Supplier) │  │ PR   ││
│  └──────┬──────┘  └──────┬──────┘  └───┬──┘│
└─────────┼─────────────────┼─────────────┼───┘
          │                 │             │
          ↓                 ↓             ↓
    [Upload ke QAD]   [Upload ke QAD] [Upload ke QAD]
          │                 │             │
          ↓                 ↓             ↓
    Warehouse         Purchasing      Approval
    Process           Process         Process
          │                 │             │
          ↓                 ↓             ↓
    Kirim ke Store    Order Supplier  Create PO
       │
       ↓
┌──────────────┐
│   LAPORAN    │ ← LSM Report
│              │ ← DOI Report
│              │ ← Compliance Report
└──────────────┘
                

🗄️ Struktur Database & Relasi Tabel

Kategori Tabel

📁 Master Data Tables

  • m_stores
  • m_menus
  • m_raw_materials
  • m_item_conversions
  • m_range_dois
  • m_fstrs
  • m_shipment_schedules
  • m_holidays
  • m_sales_types
  • m_numbering_formats

📝 Transaction Tables

  • t_forecasts
  • t_stock_opnames
  • t_item_requests
  • t_delivery_orders
  • t_stock_movements
  • t_current_stocks

⚙️ System Tables

  • users
  • roles
  • permissions
  • qad_sync_logs

Relasi Utama: Stock Opname Flow

┌─────────────────┐
│  m_stores       │
│  (Cabang)       │
└────────┬────────┘
         │ 1
         │
         │ N
┌────────▼────────────┐
│ t_stock_opnames     │ ← Header SO
│ - so_number         │
│ - store_id          │
│ - so_date           │
│ - status            │
└────────┬────────────┘
         │ 1
         │
         │ N
┌────────▼─────────────────┐         ┌──────────────────┐
│ t_stock_opname_details   │ N ────→ │ m_raw_materials  │
│ - stock_opname_id        │         │ (Bahan Baku)     │
│ - raw_material_id        │         └──────────────────┘
│ - qty_utuh               │
│ - qty_pakai              │
│ - qty_converted          │
│ - qty_total (ending)     │
└──────────────────────────┘
                
✅ Dampak Relasi:
  • Satu Store bisa punya banyak Stock Opname (history harian)
  • Satu SO punya banyak detail items
  • Setiap detail SO terhubung ke master raw material
  • Ending stock dari SO digunakan untuk calculate SPB

Relasi Utama: SPB (Item Request) Flow

┌─────────────────┐
│ t_stock_opnames │ ← SO sebelumnya
└────────┬────────┘
         │ 1
         │
         │ 1
┌────────▼────────────┐         ┌──────────────────────┐
│ t_item_requests     │ 1 ────→ │ m_stores             │
│ - spb_number        │         └──────────────────────┘
│ - store_id          │
│ - stock_opname_id   │         ┌──────────────────────┐
│ - request_type      │ 1 ────→ │ m_shipment_schedules │
│ - shipment_id       │         │ (Jadwal Kirim)       │
│ - status            │         └──────────────────────┘
└────────┬────────────┘
         │ 1
         │
         │ N
┌────────▼─────────────────┐         ┌──────────────────┐
│ t_item_request_details   │ N ────→ │ m_raw_materials  │
│ - item_request_id        │         └──────────────────┘
│ - raw_material_id        │
│ - forecast_qty           │ ← Dari forecast
│ - so_qty                 │ ← Dari SO (ending stock)
│ - tsm_qty                │ ← Target Sisa Malam
│ - suggested_qty          │ ← (Forecast - SO) + TSM
│ - adjusted_qty           │ ← Manual adjustment
│ - final_qty              │ ← Suggested + Adjusted
└──────────────────────────┘
                
💡 Formula Perhitungan SPB:

Suggested Qty = (Forecast - Ending Stock) + TSM

Final Qty = Suggested Qty + Adjusted Qty

⚠️ PENTING: Final Qty dari SPB inilah yang digunakan untuk generate DO!

Relasi: SO → SPB → DO

📦 Alur Data dari SO sampai CSV Export (DO/PO/PR)

┌─────────────────────┐
│ t_stock_opnames     │ ← Input stok malam
│ - so_number         │
│ - qty_total         │ ← Ending Stock = 53 kg
└──────────┬──────────┘
           │ 1
           │ (SO qty digunakan untuk hitung SPB)
           │
           ↓ 1
┌──────────▼──────────────┐         ┌──────────────────────┐
│ t_item_requests         │ N ────→ │ m_raw_materials      │
│ - spb_number            │         │ - tipe_dokumen       │ ← DO/PO/PR
│ - stock_opname_id       │         └──────────────────────┘
│                         │
│ Detail:                 │
│ - raw_material_id       │ ← Link ke master item
│ - forecast_qty: 100 kg  │ ← Dari forecast
│ - so_qty: 53 kg         │ ← Dari SO (ending stock)
│ - tsm_qty: 15 kg        │ ← Target buffer
│ - suggested_qty: 62 kg  │ ← (100-53)+15
│ - adjusted_qty: 8 kg    │ ← Manual adjustment
│ - final_qty: 70 kg      │ ← QTY YANG AKAN DIPESAN! ✓
└──────────┬──────────────┘
           │
           │ (Group by tipe_dokumen dari master item)
           │
           ↓
┌──────────────────────────────────────────────────────┐
│ CSV EXPORT (Format tergantung tipe_dokumen)         │
├──────────────────────────────────────────────────────┤
│                                                      │
│ Items dengan tipe_dokumen = 'DO':                   │
│   → Generate CSV DO                                  │
│   → Format: Order No, Ship From, Ship To, ...       │
│   → Qty: 70 kg (dari SPB final_qty)                 │
│                                                      │
│ Items dengan tipe_dokumen = 'PO':                   │
│   → Generate CSV PO                                  │
│   → Format: PO Number, Supplier, Order Date, ...    │
│   → Qty: 70 kg (dari SPB final_qty)                 │
│                                                      │
│ Items dengan tipe_dokumen = 'PR':                   │
│   → Generate CSV PR                                  │
│   → Format: PR Number, Requester, ...               │
│   → Qty: 70 kg (dari SPB final_qty)                 │
└──────────────────────────────────────────────────────┘
           │
           ↓
    [Upload ke QAD]
    
    File DO: DMDG021R | 101 | 178 | ... | 70 | DS | ...
    File PO: PRMG02YR | GMS | ... | 70 | DS | ...
                                    ↑
                    Qty ini = SPB final_qty untuk semua tipe!
                

✅ Ringkasan Alur Data

Tabel/Proses Field/Data Penting Fungsi
t_stock_opnames qty_total (53 kg) Input untuk perhitungan SPB
t_item_requests final_qty (70 kg) Qty yang akan dipesan
m_raw_materials tipe_dokumen (DO/PO/PR) Menentukan format CSV
CSV Export Qty Ordered (70 kg) File untuk QAD

Kesimpulan: CSV (DO/PO/PR) menggunakan final_qty dari SPB (70 kg), dengan format ditentukan oleh tipe_dokumen di master item!

⚠️ Mengapa Perlu Tipe Dokumen Berbeda?

Alasan Bisnis:

  • DO (Delivery Order) - Untuk item yang ada di warehouse internal
    • Contoh: Bakmi Frozen, Bumbu Racikan, Kulit Goreng
    • Proses: Warehouse langsung kirim ke store
    • Lead time: 1-2 hari
  • PO (Purchase Order) - Untuk item yang dibeli dari supplier
    • Contoh: Sayur Segar, Daging, Seafood
    • Proses: Purchasing order ke supplier → supplier kirim
    • Lead time: 2-3 hari
  • PR (Purchase Request) - Untuk item yang perlu approval khusus
    • Contoh: Peralatan baru, Asset, Item non-rutin
    • Proses: Request → Approval → PO → Supplier kirim
    • Lead time: 5-7 hari

Item Conversion & Calculation

┌──────────────────┐
│ m_raw_materials  │
│ - code           │
│ - name           │
│ - uom            │ ← Unit of Measure (KG, PCS, dll)
│ - tipe_dokumen   │ ← DO / PO / PR (untuk CSV export) ✓
└────────┬─────────┘
         │ 1
         │
         │ 1
┌────────▼─────────────────┐
│ m_item_conversions       │
│ - raw_material_id        │
│ - conversion_factor      │ ← Faktor konversi
│ - from_uom               │ ← Satuan asal (PCS)
│ - to_uom                 │ ← Satuan tujuan (KG)
└──────────────────────────┘

Contoh Penggunaan:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Item: Tepung Terigu
UOM: KG
Conversion: 1 Karton (PCS) = 10 KG
Tipe Dokumen: DO (dikirim dari warehouse internal)

Input SO:
  Qty Utuh: 5 karton
  Qty Pakai: 3 kg

Calculation:
  Qty Converted = 5 × 10 = 50 kg
  Ending Stock = 50 + 3 = 53 kg

Generate CSV:
  Karena tipe_dokumen = 'DO', maka item ini masuk ke CSV DO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
                

📋 Kolom Tipe Dokumen di Master Item

Kolom: tipe_dokumen di tabel m_raw_materials

Nilai yang mungkin:

  • DO Delivery Order - Item dari warehouse internal (ex: Bakmi Frozen, Bumbu Racikan)
  • PO Purchase Order - Item dari supplier eksternal (ex: Sayur Segar, Daging)
  • PR Purchase Request - Item yang perlu approval purchasing (ex: Peralatan, Asset)

Fungsi: Menentukan format CSV yang akan di-generate saat export dari SPB ke QAD

⚠️ Dampak Relasi Terhadap Transaksi

1. Dampak Perubahan Master Data

❌ Perubahan Raw Material

Skenario: Raw Material "Tepung Terigu" diubah/dihapus

Dampak:

  • ✗ SO yang sudah ada: Tetap tampil (data history)
  • ✗ SPB yang sudah ada: Tetap tampil (data history)
  • ✓ SO baru: Tidak bisa input item tersebut
  • ✓ SPB baru: Tidak bisa order item tersebut

Solusi:

  • Jangan hapus raw material yang sudah pernah digunakan
  • Gunakan flag is_active = false untuk non-aktifkan
  • Soft delete dengan delete_flag = 1

⚠️ Perubahan Conversion Factor

Skenario: Conversion factor diubah dari 10 ke 12

Dampak:

  • ✗ SO lama: Tetap pakai conversion lama (53 kg)
  • ✓ SO baru: Pakai conversion baru
    • Qty Utuh: 5 karton
    • Qty Converted = 5 × 12 = 60 kg (bukan 50 kg)
    • Ending Stock = 60 + 3 = 63 kg

⚠️ PERHATIAN:

  • Perubahan conversion affect akurasi perhitungan
  • Bisa menyebabkan over/under stock
  • Harus dikomunikasikan ke semua store

2. Dampak Perubahan Transaksi

📝 Edit Stock Opname

Aturan:

  • ✓ Status Draft: Bisa edit kapan saja
  • ✗ Status Submitted: Tidak bisa edit
  • ✗ Sudah generate SPB: Tidak bisa edit SO

Dampak jika bisa edit:

  • SPB yang sudah dibuat jadi tidak valid
  • Ending stock berubah
  • Suggested qty SPB harus di-recalculate
  • DO yang sudah dibuat jadi salah

Solusi: Lock SO setelah submit. Jika perlu koreksi, buat adjustment di SPB

✅ Best Practices

  • Selalu gunakan soft delete (delete_flag) untuk data master
  • Lock transaksi setelah approved
  • Gunakan SPB Batalan untuk koreksi, bukan edit langsung
  • Backup database sebelum perubahan besar
  • Test di environment development dulu

🔗 Integrasi dengan Sistem ERP (QAD)

Data yang Di-Upload dari QAD ke LSM (via Excel)

📤 Metode Upload: Excel File

Proses:

  1. SDP/HO export data dari QAD ke Excel
  2. Download template Excel dari LSM
  3. Copy-paste atau mapping data dari QAD ke template LSM
  4. Upload file Excel ke LSM
  5. LSM validasi dan import data

Keuntungan: Fleksibel, bisa review data sebelum upload, tidak perlu API integration

� Master Stores

Frekuensi: On-demand / Saat ada perubahan

Method: Upload Excel

Data:

  • Store Code
  • Store Name
  • Store Address
  • Status

🍽️ Master Menus

Frekuensi: On-demand / Saat ada menu baru

Method: Upload Excel

Data:

  • Menu Code (PLU)
  • Menu Name
  • Category
  • Price

� Raw Materials

Frekuensi: Bulanan / Saat ada item baru

Method: Upload Excel

Data:

  • Item Code
  • Item Name
  • UOM
  • Category
  • Tipe Dokumen (DO/PO/PR)

🔄 Item Conversions

Frekuensi: On-demand / Saat ada perubahan

Method: Upload Excel

Data:

  • Item Code
  • Conversion Factor
  • From/To UOM

Data yang Dikirim dari LSM ke QAD

🔍 Sumber Data CSV Export (DO/PO/PR)

Pertanyaan: CSV yang di-generate datanya dari mana?

Jawaban: CSV datanya dari SPB, dengan format berbeda tergantung tipe_dokumen di master item!

Alur Data:

  1. SO (Stock Opname) → Mencatat ending stock malam hari
    • Data: qty_utuh, qty_pakai, qty_total (ending stock)
    • Fungsi: Input untuk perhitungan SPB
  2. SPB (Surat Permintaan Barang) → Menghitung kebutuhan pemesanan
    • Data: forecast_qty, so_qty, tsm_qty, suggested_qty, adjusted_qty, final_qty
    • Fungsi: Menentukan qty yang akan dipesan
  3. CSV Export (DO/PO/PR) → File untuk QAD/ERP
    • Data: Ambil final_qty dari SPB + info dari master item
    • Format: Tergantung tipe_dokumen di master item (DO/PO/PR)
    • Fungsi: Instruksi ke QAD untuk proses pengadaan/pengiriman

Kesimpulan:

SO = Input data stok aktual
SPB = Perhitungan kebutuhan pemesanan (menggunakan data SO)
CSV (DO/PO/PR) = File export ke QAD (menggunakan data SPB + master item)

Tipe Dokumen & Format CSV

📋 Penentuan Tipe Dokumen

Tipe dokumen ditentukan oleh kolom tipe_dokumen di master item (m_raw_materials)

Kemungkinan nilai:

  • DO Delivery Order - Untuk item yang dikirim dari warehouse internal
  • PO Purchase Order - Untuk item yang dibeli dari supplier eksternal
  • PR Purchase Request - Untuk permintaan pembelian yang perlu approval

Contoh:
• Item "Bakmi Rebus Frozen" → tipe_dokumen = DO (dari warehouse GMS)
• Item "Sayur Segar" → tipe_dokumen = PO (beli dari supplier)
• Item "Peralatan Baru" → tipe_dokumen = PR (perlu approval purchasing)

📤 Format CSV: Delivery Order (DO)

Untuk item dengan tipe_dokumen = 'DO'
Frekuensi: Setelah SPB Approved
Method: CSV File Export

Kolom CSV DO:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Order No (8 Char)       | Nomor DO
Ship From (8 Char)      | Warehouse asal (ex: 101)
Ship To (8 Char)        | Store tujuan (ex: 178)
Order Date              | Tanggal order
Due Date (Date)         | Tanggal kirim
Remarks (40 Char)       | Catatan (ex: 13:30/Ikzan)
Item Number             | Kode item
Item Name               | Nama item
Qty Ordered             | Qty dari SPB final_qty ✓
UoM                     | Satuan (ex: DS, KG)
Transport ID (8 Char)   | ID kendaraan (ex: INTGMS)
Keterangan (100 Char)   | Keterangan tambahan
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Contoh Data:
DMDG021R | 101 | 178 | 7/1/2025 | 7/2/2025 | 13:30/Ikzan | FRZ5040 | BAKMI GORENG FRZ 8KG | 1 | DS | INTGMS |
DMDG021R | 101 | 178 | 7/1/2025 | 7/2/2025 | 13:30/Ikzan | FRZ5021 | BAKMI REBUS FROZEN 9.1KG | 4 | DS | INTGMS |
DMDG021R | 101 | 178 | 7/1/2025 | 7/2/2025 | 13:30/Ikzan | FRZ5036 | KULIT GORENG VACUUM 7.5KG | 2 | DS | INTGMS |

Flow:
LSM Generate CSV DO → Upload ke QAD → Warehouse Process → Kirim ke Store
                

📤 Format CSV: Purchase Order (PO)

Untuk item dengan tipe_dokumen = 'PO'
Frekuensi: Setelah SPB Approved
Method: CSV File Export

Kolom CSV PO:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Purchase Order (8 Char) | Nomor PO
Supplier (8 Char)       | Kode supplier (ex: GMS)
Order Date (Date)       | Tanggal order
Due Date (Date)         | Tanggal kirim
Remarks (40 Char)       | Catatan (ex: 08:00/jamhuri)
Site (8 Char)           | Lokasi site (ex: 0A111)
Currency (3 Char)       | Mata uang (ex: IDR)
Credit Terms (8 Char)   | Termin pembayaran
Line (Integer)          | Nomor baris
Item Number (18 Char)   | Kode item
Item Name               | Nama item
Qty Ordered (Decimal)   | Qty dari SPB final_qty ✓
UoM (2 Char)            | Satuan (ex: DS, KG)
Unit Cost (Decimal)     | Harga satuan
Taxable (Yes/No)        | Kena pajak atau tidak
Tax Class (3 Char)      | Kelas pajak
Tax In (Yes/No)         | Pajak include atau tidak
Keterangan (100 Char)   | Keterangan tambahan
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Contoh Data:
PRMG02YR | GMS | 7/1/2025 | 7/2/2025 | 08:00/jamhuri | 0A111 | IDR | | 1 | FRZ5021 | BAKMI REBUS FROZEN 9.1KG | 5 | DS | | | | |
PRMG02YR | GMS | 7/1/2025 | 7/2/2025 | 08:00/jamhuri | 0A111 | IDR | | 2 | FRZ5080 | BAKMI MENTAH RETAIL | 1 | DS | | | | |

Flow:
LSM Generate CSV PO → Upload ke QAD → Purchasing Process → Order ke Supplier
                

✅ Proses Generate CSV dari SPB

Langkah-langkah:

  1. SPB sudah approved dengan final_qty untuk setiap item
  2. Sistem baca tipe_dokumen dari master item (m_raw_materials)
  3. Group items berdasarkan tipe_dokumen:
    • Items dengan tipe DO → Generate CSV DO
    • Items dengan tipe PO → Generate CSV PO
    • Items dengan tipe PR → Generate CSV PR
  4. Export masing-masing CSV dengan format sesuai tipe
  5. Upload ke QAD untuk diproses

Contoh: Jika SPB punya 10 items:
• 7 items tipe DO → Generate 1 file CSV DO dengan 7 baris
• 3 items tipe PO → Generate 1 file CSV PO dengan 3 baris

Relasi Data: SO → SPB → DO

🔗 Alur Data Lengkap

┌─────────────────────────────────────────────────────────┐
│ HARI 1 - MALAM: STOCK OPNAME (SO)                      │
├─────────────────────────────────────────────────────────┤
│ Input:                                                  │
│   • Qty Utuh: 5 karton                                 │
│   • Qty Pakai: 3 kg                                    │
│                                                         │
│ Output SO:                                              │
│   • Ending Stock: 53 kg ← Disimpan di SO               │
└─────────────────────────────────────────────────────────┘
                    ↓
┌─────────────────────────────────────────────────────────┐
│ HARI 2 - PAGI: GENERATE SPB                            │
├─────────────────────────────────────────────────────────┤
│ Input:                                                  │
│   • Forecast: 100 kg                                   │
│   • SO Qty (Ending Stock): 53 kg ← Ambil dari SO      │
│   • TSM: 15 kg                                         │
│                                                         │
│ Perhitungan:                                            │
│   • Suggested Qty = (100 - 53) + 15 = 62 kg           │
│   • Adjusted Qty = +8 kg (manual adjustment)           │
│   • Final Qty = 62 + 8 = 70 kg ← Disimpan di SPB      │
└─────────────────────────────────────────────────────────┘
                    ↓
┌─────────────────────────────────────────────────────────┐
│ HARI 2 - SIANG: GENERATE DO                            │
├─────────────────────────────────────────────────────────┤
│ Input:                                                  │
│   • Final Qty dari SPB: 70 kg ← Ambil dari SPB        │
│                                                         │
│ Output DO (CSV):                                        │
│   DO-001, ST001, RM001, 70, KG, 2024-01-17            │
│                          ↑                              │
│                    Qty ini dari SPB final_qty!          │
└─────────────────────────────────────────────────────────┘
                    ↓
┌─────────────────────────────────────────────────────────┐
│ HARI 3 - PAGI: TERIMA BARANG                           │
├─────────────────────────────────────────────────────────┤
│ Warehouse kirim barang sesuai DO:                      │
│   • Item: Tepung Terigu                                │
│   • Qty: 70 kg ← Sesuai DO (dari SPB final_qty)       │
└─────────────────────────────────────────────────────────┘
                

⚠️ Mengapa DO Tidak Langsung dari SO?

Alasan:

  • SO hanya mencatat stok aktual - Tidak ada informasi berapa yang harus dipesan
  • SPB menghitung kebutuhan - Mempertimbangkan forecast, TSM, dan adjustment
  • DO adalah instruksi pengiriman - Harus berdasarkan qty yang sudah disetujui di SPB

Contoh Kasus:

Jika SO menunjukkan ending stock 53 kg, bukan berarti warehouse harus kirim 53 kg!
Yang dikirim adalah hasil perhitungan di SPB (70 kg) yang sudah mempertimbangkan forecast dan TSM.

Sync Process & Monitoring

📊 Upload & Export Monitoring

Table: qad_sync_logs (untuk tracking upload/export)

  • Last upload time per type (Stores, Menus, Items)
  • Success rate (%) - berapa baris berhasil diimport
  • Validation errors - error per row
  • CSV export history - tracking file yang di-generate
  • Failed records list dengan detail error
Data Type Direction Method Frequency
Stores QAD → LSM Upload Excel On-demand
Menus QAD → LSM Upload Excel On-demand
Items QAD → LSM Upload Excel Bulanan / On-demand
SPB (CSV DO/PO/PR) LSM → QAD Download CSV Setelah SPB Approved

🔢 Master Format Numbering SPB

Sistem Penomoran Dokumen

Sistem LSM Web Portal menggunakan format penomoran yang terstruktur dan dapat membedakan berbagai jenis dokumen berdasarkan karakteristik transaksi dan barang.

Pembedaan Format Numbering

1️⃣ SPB Type

Regular:

  • Pemesanan rutin harian
  • Berdasarkan forecast & SO
  • Jadwal tetap

Non-Regular:

  • SPB Tambahan
  • SPB Batalan
  • Di luar jadwal regular

2️⃣ Document Type

  • SPB Surat Permintaan Barang
  • SO Stock Opname
  • PO Purchase Order
  • DO Delivery Order
  • PR Purchase Request

3️⃣ Item Type

Basah:

  • Masa simpan pendek
  • Sayuran, daging, seafood
  • Perlu handling khusus

Kering:

  • Masa simpan panjang
  • Bumbu, minyak, tepung
  • Storage normal

Format Pattern & Placeholder

📝 Available Placeholders

{DOCTYPE}   → Document Type (SPB, SO, PO, DO, PR)
{STORE}     → Store Code (STR01, STR02, dll)
{SPBTYPE}   → SPB Type (REG, NONREG, ALL)
{ITEMTYPE}  → Item Type (BASAH, KERING, ALL)
{YYYY}      → Year 4 digits (2024)
{YY}        → Year 2 digits (24)
{MM}        → Month 2 digits (01-12)
{DD}        → Day 2 digits (01-31)
{NUMBER}    → Sequential Number (0001, 0002, ...)
{PREFIX}    → Custom Prefix
{SUFFIX}    → Custom Suffix
{SEP}       → Separator Character (-, _, /)
                

Contoh Format Pattern

Pattern Output Example Use Case
{DOCTYPE}{SEP}{STORE}{SEP}{YY}{MM}{SEP}{NUMBER} SPB-STR01-2601-0001 Format standar umum
{DOCTYPE}{SEP}{SPBTYPE}{SEP}{ITEMTYPE}{SEP}{NUMBER} SPB-REG-BASAH-0001 Pembedaan tipe SPB & item
{STORE}{SEP}{DOCTYPE}{SEP}{SPBTYPE}{SEP}{NUMBER} STR01-SPB-NONREG-0001 Store-centric numbering
{DOCTYPE}{SEP}{ITEMTYPE}{SEP}{YY}{MM}{SEP}{NUMBER} SPB-KERING-2601-0001 Item type focus
{STORE}{DOCTYPE}{YY}{MM}{DD}{NUMBER} STR01SPB2601190001 Compact format (no separator)

Skenario Penggunaan

📋 Skenario 1: SPB Regular Item Basah

Kondisi:

  • Store: Cabang Senayan (STR01)
  • Document: SPB
  • SPB Type: Regular
  • Item Type: Basah
  • Tanggal: 19 Januari 2026

Format Pattern: {DOCTYPE}{SEP}{SPBTYPE}{SEP}{ITEMTYPE}{SEP}{YY}{MM}{DD}{SEP}{NUMBER}

Generated Number: SPB-REG-BASAH-260119-0001

📋 Skenario 2: SPB Non-Regular Item Kering

Kondisi:

  • Store: Cabang Kelapa Gading (STR02)
  • Document: SPB
  • SPB Type: Non-Regular (SPB Tambahan)
  • Item Type: Kering
  • Tanggal: 19 Januari 2026

Format Pattern: {STORE}{SEP}{DOCTYPE}{SEP}{SPBTYPE}{SEP}{ITEMTYPE}{SEP}{NUMBER}

Generated Number: STR02-SPB-NONREG-KERING-0001

📋 Skenario 3: Format All (Universal)

Kondisi:

  • Store: Semua Cabang
  • Document: SO (Stock Opname)
  • SPB Type: All
  • Item Type: All

Format Pattern: {DOCTYPE}{SEP}{STORE}{SEP}{YYYY}{MM}{DD}{SEP}{NUMBER}

Generated Number: SO-STR01-20260119-001

Kegunaan: Format universal yang berlaku untuk semua tipe SPB dan item

Keuntungan Sistem Numbering Terstruktur

🎯 Identifikasi Mudah

Dari nomor dokumen langsung tahu:

  • Jenis dokumen apa
  • Store mana
  • Regular atau tidak
  • Item basah atau kering

📊 Reporting Akurat

Memudahkan analisis:

  • Frekuensi SPB Regular vs Non-Regular
  • Volume item Basah vs Kering
  • Pattern pemesanan per store
  • Trend per periode

🔍 Tracking Efisien

Pencarian & monitoring:

  • Filter by SPB type
  • Filter by item type
  • Quick search by pattern
  • Audit trail jelas

⚙️ Fleksibel & Scalable

Mudah dikembangkan:

  • Tambah tipe baru
  • Custom per store
  • Adjust format sesuai kebutuhan
  • Support multi-warehouse

Reset Period & Counter Management

Reset Period Deskripsi Use Case Example
Never Counter tidak pernah reset Dokumen yang perlu unique selamanya SPB-0001, SPB-0002, ...
Daily Reset setiap hari Stock Opname harian SO-20260119-001, SO-20260120-001
Monthly Reset setiap bulan SPB Regular bulanan SPB-2601-0001, SPB-2602-0001
Yearly Reset setiap tahun Purchase Order tahunan PO-2026-0001, PO-2027-0001

⚠️ Penting: Unique Constraint

Sistem memastikan tidak ada duplikasi nomor dengan constraint:

UNIQUE (store_id, document_type, spb_type, item_type, delete_flag)

Artinya: Setiap kombinasi store, document type, SPB type, dan item type hanya boleh punya 1 format aktif.

📊 Contoh Kasus Lengkap

Proses 3 Hari: Store "Cabang Senayan"

📅 Hari 1 (Senin) - Setup & Forecast

08:00 - SDP Upload Forecast
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Upload Excel forecast untuk minggu ini
Forecast untuk Cabang Senayan:
  • Tepung Terigu: 100 kg/hari
  • Minyak Goreng: 50 liter/hari
  • Telur: 200 butir/hari

10:00 - SSM Review Forecast
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Review forecast yang di-upload
Adjust berdasarkan event:
  • Ada promo hari Rabu → increase 20%
  • Tepung Terigu: 120 kg (Rabu)

14:00 - SM Set Target Sisa Malam
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Set TSM untuk setiap item:
  • Tepung Terigu: 15 kg (buffer 1 hari)
  • Minyak Goreng: 10 liter
  • Telur: 50 butir
                

🌙 Hari 1 (Senin) - Malam (Stock Opname)

22:00 - Staff Store Input SO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Store: Cabang Senayan
Tanggal: 2024-01-15

Item 1: Tepung Terigu
  • Qty Utuh: 2 karton (1 karton = 10 kg)
  • Qty Pakai: 5 kg
  • Conversion: 2 × 10 = 20 kg
  • Ending Stock: 20 + 5 = 25 kg

Item 2: Minyak Goreng
  • Qty Utuh: 3 jerigen (1 jerigen = 5 liter)
  • Qty Pakai: 2 liter
  • Conversion: 3 × 5 = 15 liter
  • Ending Stock: 15 + 2 = 17 liter

Item 3: Telur
  • Qty Utuh: 5 tray (1 tray = 30 butir)
  • Qty Pakai: 10 butir
  • Conversion: 5 × 30 = 150 butir
  • Ending Stock: 150 + 10 = 160 butir

22:30 - Submit SO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  • Status: Draft → Submitted
  • SO Number: SO-SEN-20240115-001
  • Data locked, tidak bisa edit
                

☀️ Hari 2 (Selasa) - Pagi (Generate SPB)

07:00 - SM Generate SPB dari SO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Store: Cabang Senayan
Tanggal: 2024-01-16
Referensi SO: SO-SEN-20240115-001

Perhitungan Otomatis:

Item 1: Tepung Terigu
  • Forecast (Selasa): 100 kg
  • Ending Stock (dari SO): 25 kg
  • TSM: 15 kg
  • Suggested Qty = (100 - 25) + 15 = 90 kg
  • Adjustment: +10 kg (ada catering order)
  • Final Qty: 100 kg ✓

Item 2: Minyak Goreng
  • Forecast: 50 liter
  • Ending Stock: 17 liter
  • TSM: 10 liter
  • Suggested Qty = (50 - 17) + 10 = 43 liter
  • Adjustment: 0
  • Final Qty: 43 liter ✓

Item 3: Telur
  • Forecast: 200 butir
  • Ending Stock: 160 butir
  • TSM: 50 butir
  • Suggested Qty = (200 - 160) + 50 = 90 butir
  • Adjustment: 0
  • Final Qty: 90 butir ✓

08:00 - Review & Submit SPB
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  • SPB Number: SPB-SEN-20240116-001
  • Status: Draft → Submitted → Approved
  • Siap generate DO
                

✅ Analisis Kasus

Akurasi Forecast:

  • Tepung Terigu: Variance -20.8% (Under forecast - aman)
  • Telur: Variance -15% (Under forecast - aman)

Efektivitas TSM:

  • Semua item ending stock di atas TSM ✓
  • TSM setting sudah tepat ✓

Efisiensi Proses:

  • Total Lead Time: 34 jam (dari SO sampai terima barang)
  • Target: < 36 jam
  • Status: ✓ Sesuai target

🎓 Kesimpulan

Keunggulan Sistem LSM Web Portal

🤖 Otomasi Perhitungan

  • Auto-calculate ending stock
  • Auto-suggest SPB qty
  • Mengurangi human error

📊 Real-time Monitoring

  • Dashboard monitor semua store
  • Alert untuk item critical
  • Tracking DO lengkap

🔗 Integrasi ERP

  • Sync master data dari QAD
  • Export DO ke QAD
  • Single source of truth

📝 Audit Trail

  • Log semua perubahan
  • Track user activity
  • History lengkap

Rekomendasi Implementasi

Phase Scope Duration Activities
Phase 1 Pilot (1-2 Store) 2-4 minggu Test flow, training, fix bugs
Phase 2 Rollout (5-10 Store) 4-6 minggu Deploy, monitor, collect feedback
Phase 3 Full Deployment 8-12 minggu Deploy semua store, continuous improvement

📌 Maintenance Plan

  • Daily: Monitor sync logs & system health
  • Weekly: Review error reports & user feedback
  • Monthly: Performance review & optimization
  • Quarterly: User training & feature enhancement