SP IKG CARWASH

STATUS ANTRIAN KENDARAAN

{{ tvPromo }}
{{ tvStats.totalWaiting }}
Menunggu
{{ tvStats.avgWait }}
Rata² Tunggu (mnt)
{{ tvStats.todayCustomers }}
Pelanggan Hari Ini

Menunggu

{{ w.plate_number }}
Est. {{ getEstimatedMinutes(w) }} mnt
Antrian Kosong

⏳ Sedang Cuci

{{ w.plate_number }}
Proses Cuci
Tidak Ada

Finishing

{{ w.plate_number }}
Segera Selesai ✓
Kosong
Live Update · {{ time }}

📸 Bukti Transfer QRIS

Arahkan bukti pembayaran ke kamera

TERTANGKAP

Sinkronisasi Offline POS

Status Jaringan: {{ isOnline ? '🟢 Online (Terhubung)' : '🔴 Offline (Terputus)' }}

Tidak ada transaksi tertunda. Semua data sudah tersimpan di server.
{{ item.id }} {{ item.type === 'wash_checkout' ? '🚗 Steam' : '🍽️ Warung' }}
{{ item.payload.plate || item.payload.customer_name || 'Pelanggan' }} · Rp {{ Number(item.payload.total || item.payload.final_total || 0).toLocaleString('id-ID') }}

SP IKG CARWASH

ENTERPRISE ERP v6

© 2026 SP IKG CARWASH · All Rights Reserved

BUKA KASIR

Input modal awal laci kasir hari ini

Rp

SP IKG CARWASH

PRO ERP
· {{ user.username }}
OFFLINE
{{ time }}
⭐ Poin Member
Rp {{ activeCustomer.points.toLocaleString() }}
Gratis 1x Cuci! (Visit ke-{{ activeCustomer.total_visits }})
{{ c.name }} Tidak ada kasir aktif
{{ pkg.name }}
{{ formatPrice(pkg.price) }}
{{ pkg.services_list }}
{{ s.icon || '🧽' }}
{{ s.name }}
Rp {{ parseFloat(s.price).toLocaleString() }}
Tidak ada layanan untuk {{ transaction.type }}
{{ m.icon || '🍽️' }}
{{ m.name }}
{{ formatPrice(m.price) }}
Belum ada menu
{{ item.name }}
{{ item.qty }}
{{ formatPrice(item.price * item.qty) }}
Subtotal Makanan {{ formatFoodSubtotal() }}
Kamera Siap
Tagihan PAKET
Subtotal Rp {{ subTotal.toLocaleString() }}
Makanan + Rp {{ foodCart.reduce((s,i) => s + (i.price*i.qty), 0).toLocaleString() }}
Poin Digunakan - Rp {{ transaction.points_used.toLocaleString() }}
Diskon Manual
Rp
PPN 11%
+ Rp {{ taxAmount.toLocaleString() }}
Voucher
{{ appliedVoucher.code }} - Rp {{ voucherDiscount.toLocaleString() }}
Total Bayar Rp {{ finalTotal.toLocaleString() }}
Pembayaran akan dilakukan setelah cuci selesai
Pecahan Pembayaran
QRIS (Rp)
Cash Sisa
Rp {{ Math.max(0, total - (transaction.split_amount || 0)).toLocaleString() }}
Pecahan Cepat
Uang Diterima
Rp
Kembalian Rp {{ cashChange.toLocaleString() }}
Digital Watermark · Struk Otomatis

Antrian Steam {{ activeSteamWorks.length }}

{{ w.plate_number }} {{ new Date(w.created_at).toLocaleTimeString('id-ID', {hour:'2-digit', minute:'2-digit'}) }} {{ w.workflow_status || 'Menunggu' }} QRIS Belum Bayar
Layanan: {{ w.details ? w.details.map(d => d.service ? d.service.name : '').join(', ') : 'Paket Custom' }}
Pesanan Makanan: {{ parseFoodItems(w.food_items).map(i => (i.name || i.item_name || 'Item') + ' x' + (i.qty || 1)).join(', ') }}
Pekerja: {{ parseWorkers(w.workers).join(', ') }}
{{ getElapsedMinutes(w.created_at) }} / {{ getEstimatedMinutes(w) }} Menit
{{ isOvertime(w) ? '⚠️ OVERTIME' : Math.min(100, Math.round((getElapsedMinutes(w.created_at) / getEstimatedMinutes(w)) * 100)) + '%' }}
Tidak ada antrian steam

Pesanan Makanan {{ foodQueueList.length }}

{{ w.plate_number }} {{ new Date(w.created_at).toLocaleTimeString('id-ID', {hour:'2-digit', minute:'2-digit'}) }} {{ (w.food_workflow_status || w.workflow_status) === 'Siap' ? 'Siap Saji' : ((w.food_workflow_status || w.workflow_status) || 'Menunggu') }}
Pesanan: {{ parseFoodItems(w.food_items).map(i => (i.name || i.item_name || 'Item') + ' x' + (i.qty || 1)).join(', ') }} Tidak ada data makanan
{{ w.details.map(d => d.service ? d.service.name : '').join(', ') }}
{{ getElapsedMinutes(w.created_at) }} / {{ getEstimatedMinutes(w) }} Menit
{{ Math.min(100, Math.round((getElapsedMinutes(w.created_at) / getEstimatedMinutes(w)) * 100)) + '%' }}
Tidak ada pesanan makanan
Filter
🏍️ Motor
{{ filteredHistoryMotorCount }}
🚗 Mobil
{{ filteredHistoryMobilCount }}
🍴 Warung
{{ filteredHistoryWarungCount }}
💰 Revenue
{{ formatPrice(filteredHistoryRevenue) }}

Riwayat Transaksi

{{ filteredHistory.length }}· memuat…
Invoice / Tanggal Kendaraan Total Bayar Aksi
{{ t.invoice_number }} WRG PPN
{{ new Date(t.created_at).toLocaleString('id-ID', {day: 'numeric', month: 'short', year: 'numeric', hour: '2-digit', minute: '2-digit'}) }}
{{ t.plate_number }}
Rp {{ parseFloat(t.total).toLocaleString() }}
{{ t.payment_method }} VOID
Tidak ada transaksi di periode ini Belum ada riwayat transaksi
Hal {{ historyPage }} / {{ historyTotalPages }}
Cari & Filter
📋 Total
{{ adminTrxTotal }}
🏍️ Motor
{{ adminTrxMotorCount }}
🚗 Mobil
{{ adminTrxMobilCount }}
🍴 Warung
{{ adminTrxWarungCount }}
💰 Revenue
{{ formatPrice(adminTrxRevenue) }}

Data Transaksi

{{ adminTransactions.length }}
Invoice / Waktu Kendaraan Layanan Kasir Pembayaran Status Total Aksi
{{ t.invoice_number }} WRG ST+M
{{ new Date(t.created_at).toLocaleString('id-ID', {day: 'numeric', month: 'short', year: 'numeric', hour: '2-digit', minute: '2-digit'}) }}
{{ t.plate_number }}
{{ t.vehicle_type || '-' }}
{{ t.details.map(d => d.name).join(', ') }}
🍴 Warung
-
{{ t.cashier_name || '-' }}
Rp {{ parseFloat(t.total).toLocaleString() }}
{{ t.payment_method }} +split
{{ t.status }} Rp {{ parseFloat(t.total).toLocaleString() }}
Tidak ada transaksi yang cocok
Hal {{ adminTrxPage }} / {{ adminTrxTotalPages }}

Manajemen User

{{ u.username }}
{{ u.role }} · {{ u.branch }}
Belum ada user.

Supplier

{{ sup.name }}
{{ sup.contact }} | {{ sup.category }}
Aktif
Belum ada supplier.

Aset & Maintenance

Smart Scheduler System
{{ ast.asset_name }} #{{ ast.asset_code }}
Servis: {{ ast.maintenance_date ? new Date(ast.maintenance_date).toLocaleDateString('id-ID') : 'Belum Diatur' }}
{{ ast.condition }}
DUE!
Belum ada aset.

Layanan Steam

{{ s.icon || '🧽' }}
{{ s.name }}
{{ s.vehicle_type || 'Semua Kendaraan' }}
Rp {{ parseFloat(s.price).toLocaleString() }}
Belum ada layanan steam

Paket Hemat

{{ pkg.name }}
{{ pkg.type }}
{{ formatPrice(pkg.price) }}
Isi:{{ getPackageServiceNames(pkg) }}
Belum ada paket hemat.

Gudang & Bahan Cuci

{{ i.item_name }}
Sisa: {{ i.stock }} {{ i.unit }}

Riwayat PO

{{ p.po_number }} PENDING DITERIMA
{{ p.qty }}x {{ p.item_name }}
Rp {{ parseFloat(p.total_cost).toLocaleString() }}

Menu Makanan & Minuman Warung

{{ m.icon || '🍽️' }}
{{ m.name }}
{{ formatPrice(m.price) }} {{ m.category }}
Belum ada menu warung

🎟️ Voucher & Promo

{{ v.code }}
{{ v.value }}% Rp {{ parseFloat(v.value).toLocaleString() }} · Min. Rp {{ parseFloat(v.min_purchase).toLocaleString() }}
Pakai: {{ v.used_count }}/{{ v.max_uses }}
sd {{ v.valid_until }}
Belum ada voucher

🏪 Profil Cabang

{{ b.name.charAt(0) }}
{{ b.name }} {{ b.code }}
{{ b.address || '-' }}
{{ b.phone || '-' }} {{ b.city ? '· ' + b.city : '' }}
Manager: {{ b.manager || '-' }} {{ b.open_time }} - {{ b.close_time }}
Cabang Aktif
Belum ada cabang

Backup & Keamanan

Filter Periode

Dashboard & laporan otomatis menyesuaikan rentang waktu

s/d

Shift Kasir

{{ activeShift ? 'Sedang Buka' : 'Tidak Ada Shift Aktif' }}

Modal Awal
Rp {{ formatPrice(activeShift.starting_cash) }}
Dibuka
{{ activeShift.opened_at ? new Date(activeShift.opened_at).toLocaleTimeString('id-ID') : '-' }}
Transaksi Hari Ini
{{ todayTransactions.length }}x
Total Penjualan
Rp {{ formatPrice(todayRevenue) }}

Belum buka shift. Buka shift dulu di tab KASIR.

Transaksi Hari Ini {{ todayTransactions.length }} transaksi

{{ t.invoice_number }} {{ t.status }}
{{ t.plate_number || '-' }} · {{ t.vehicle_type || '-' }} 🍴
Rp {{ formatPrice(t.total) }}
{{ t.payment_method || 'Cash' }}

Belum ada transaksi hari ini

💦 Steam Hari Ini
{{ todaySteamCount }}
🏍️ {{ todaySteamMotorCount }} 🚗 {{ todaySteamMobilCount }}
🍴 Warung
{{ todayFoodCount }}
Pending
{{ todayPendingCount }}
Selesai
{{ todayDoneCount }}

Pembayaran Hari Ini Total: Rp {{ formatPrice(todayRevenue) }}

Cash {{ todayCashCount }}x transaksi
Rp {{ formatPrice(todayCashTotal) }}
{{ todayRevenue > 0 ? Math.round(todayCashTotal / todayRevenue * 100) : 0 }}% dari total
QRIS {{ todayQrisCount }}x transaksi
Rp {{ formatPrice(todayQrisTotal) }}
{{ todayRevenue > 0 ? Math.round(todayQrisTotal / todayRevenue * 100) : 0 }}% dari total

Absensi Karyawan

Klik status kehadiran untuk memperbarui absensi hari ini

Hadir {{ todayAttendanceSummary.hadir }}
Izin / Sakit {{ todayAttendanceSummary.izin }}
Alpha {{ todayAttendanceSummary.alpha }}
Belum Absen {{ todayAttendanceSummary.belum }}
{{ w.name }} {{ w.role || w.position }}
Hari ini: {{ getAttendanceStatus(w.name) || 'Belum Absen' }}

Laporan Pencucian

Periode: {{ reportPeriodLabel }}
Total Steam
{{ viewerSteamTotal }}
Unit Kendaraan
🏍️ Motor
{{ viewerSteamMotorCount }}
Unit Motor
🚗 Mobil
{{ viewerSteamMobilCount }}
Unit Mobil
No. Nota Waktu Jenis Plat Nomor Layanan Pembayaran Total
{{ t.invoice_number }} {{ new Date(t.created_at).toLocaleTimeString('id-ID', {hour:'2-digit', minute:'2-digit'}) }} {{ t.vehicle_type || '-' }} {{ t.plate_number || '-' }} {{ t.business_type === 'food' ? '🍴 Warung' : t.business_type === 'combined' ? '💦 Steam + 🍴' : '💦 Steam' }} {{ t.payment_method || 'Cash' }} Rp {{ formatPrice(t.total) }}
Belum ada transaksi di periode ini
Total Pencucian {{ reportTransactions.length }} unit
Hal {{ reportPage }} / {{ reportTotalPages }}

Histori Biaya Operasional

Total: Rp {{ formatPrice(viewerExpensesTotal) }}
Tanggal Deskripsi / Keterangan Nominal Aksi
{{ new Date(e.created_at).toLocaleDateString('id-ID', {day:'numeric', month:'short', year:'numeric'}) }} {{ e.description || '-' }} Rp {{ formatPrice(e.amount) }}
Belum ada biaya operasional di periode ini
Total Biaya Operasional Rp {{ formatPrice(viewerExpensesTotal) }}

Antrian Reservasi

{{ b.customer_name }} {{ b.plate_number.toUpperCase() }}
{{ new Date(b.booking_time).toLocaleString('id-ID') }}
Tidak ada jadwal

Member Loyalty

Program Poin Otomatis

Poin 5% otomatis masuk setelah transaksi selesai. Masukkan Plat Nomor di Tab Kasir untuk memotong Poin.

Total Member Terdaftar
{{ customers.length }} Kendaraan

Database Member

Plat Nomor Nama No. HP Kunjungan Total Poin Status
{{ c.plate_number }} {{ c.name || '-' }} {{ c.phone_number || '-' }}
{{ c.total_visits }}x Cuci
{{ parseFloat(c.points).toLocaleString() }}
VIP Regular
Belum ada data member yang cocok

Payroll Karyawan

Komisi Omset + Insentif Per Unit

Riwayat Payroll

Periode: {{ p.period }} {{ p.start_date }} s/d {{ p.end_date }}
Rp {{ formatPrice(p.total_payroll) }} {{ p.status === 'paid' ? '✓ PAID' : 'DRAFT' }}
💰 OmsetRp {{ formatPrice(p.total_revenue) }}
🔧 KomisiRp {{ formatPrice(p.pool_amount) }}
🫙 TipRp {{ formatPrice(p.tips_total || 0) }}
📊 Laba BersihRp {{ formatPrice(p.net_profit || 0) }}
Distribusi:
{{ d.worker_name }} ({{ d.role }})
Rp {{ formatPrice(d.total_earned) }} +Tip Rp {{ formatPrice(d.incentive_earned) }}

Belum ada payroll

Klik "HITUNG PAYROLL" untuk membuat baru

Memuat data...