Shift kasir belum dibuka
Shift sedang berjalan {{ shiftData.shift_name }}
Dibuka oleh {{ shiftData.user_name }} pada {{ formatDateTime(shiftData.opened_at) }}
Kas Awal
Rp {{ formatNum(shiftData.opening_cash) }}
Penjualan Shift
Rp {{ formatNum(shiftData.sales_total) }}
Kas Diperkirakan
Rp {{ formatNum(shiftData.expected_cash) }}
{{ item.name }}
✓ di keranjangBelum ada meja terdaftar, jadi nomor meja tidak bisa dipilih. Tambahkan meja di menu Meja dulu, atau pilih Takeaway.
Modul QR Order Meja nonaktif — nomor meja tidak wajib, Dine-In tetap bisa diproses tanpa meja.
Keranjang masih kosong
Klik item menu untuk menambahkan
{{ item.name }}
Rp {{ formatNum(item.price) }}Note: "{{ item.note }}"
Shift Belum Dibuka
Buka shift kasir terlebih dahulu agar halaman kasir aktif dan dapat memproses transaksi.
Belum ada meja terdaftar, jadi nomor meja tidak bisa dipilih. Tambahkan meja di menu Meja dulu, atau pilih Takeaway.
Modul QR Order Meja nonaktif — nomor meja tidak wajib, Dine-In tetap bisa diproses tanpa meja.
Keranjang masih kosong
Klik item menu untuk menambahkan
{{ item.name }}
Rp {{ formatNum(item.price) }}Note: "{{ item.note }}"
👨🍳 Kitchen Display System (KDS Dapur)
Monitor dan perbarui status hidangan dapur secara real-time
Tidak ada antrean pesanan di dapur
⏰ {{ formatTime(order.created_at) }} • ({{ order.type }})
Note: "{{ item.note }}"
💰 Kas Restoran
Pantau saldo kas serta catat setiap uang masuk (setoran) dan keluar (pengeluaran).
Saldo Kas Saat Ini
Rp {{ formatNum(cashData.balance) }}
Total Kas Masuk
Rp {{ formatNum(cashData.total_in) }}
Total Kas Keluar
Rp {{ formatNum(cashData.total_out) }}
↗ Rincian Kas Masuk
↙ Rincian Kas Keluar
📒 Riwayat Pergerakan Kas
{{ cashData.logs.length }} catatan| Tipe | Kategori | Jumlah | Keterangan | Operator | Waktu | Aksi |
|---|---|---|---|---|---|---|
| Belum ada catatan kas. Klik "Kas Masuk / Kas Keluar" untuk memulai. | ||||||
| {{ log.type === 'in' ? 'MASUK' : 'KELUAR' }} | {{ log.category || '-' }} | {{ log.type === 'in' ? '+' : '-' }} Rp {{ formatNum(log.amount) }} | {{ log.description || '-' }} | {{ log.operator || '-' }} | {{ formatTime(log.created_at) }} | otomatis |
🔄 Riwayat Shift Kasir
Rekap shift yang sudah ditutup beserta selisih kas fisik.
| Sesi | Kasir | Dibuka | Ditutup | Kas Awal | Penjualan | Kas Diperkirakan | Kas Akhir | Selisih | Aksi |
|---|---|---|---|---|---|---|---|---|---|
| Belum ada riwayat shift. | |||||||||
| {{ s.shift_name || '-' }} | {{ s.user_name || '-' }} | {{ formatDateTime(s.opened_at) }} | {{ formatDateTime(s.closed_at) }} | Rp {{ formatNum(s.opening_cash) }} | Rp {{ formatNum(s.sales_total) }} | Rp {{ formatNum(s.expected_cash) }} | Rp {{ formatNum(s.closing_cash) }} | {{ s.difference >= 0 ? '+' : '' }} Rp {{ formatNum(s.difference) }} | |
📈 Laporan Penjualan & Analytics
Ringkasan lengkap pendapatan, transaksi, menu terlaris & ulasan pelanggan.
Hasil Cocokkan Rekap
{{ reconReport.ok ? 'Semua cocok — tidak ada selisih antara Riwayat Transaksi dan Laporan Shift.' : 'Ditemukan selisih/permasalahan — lihat rincian di bawah.' }}
| Shift | Jendela Waktu | Laporan Shift | Riwayat (filter Shift) | Selisih |
|---|---|---|---|---|
| {{ r.name }} | {{ formatDateTime(r.open) }} → {{ r.closed ? formatDateTime(r.closed) : 'berjalan' }} | {{ r.modalCount }} trx · Rp {{ formatNum(r.modal) }} | {{ r.riwayatCount }} trx · Rp {{ formatNum(r.riwayat) }} | {{ r.diff === 0 ? '✓ 0' : (r.diff > 0 ? '+' : '') + 'Rp ' + formatNum(r.diff) }} |
| TOTAL | Rp {{ formatNum(reconReport.totalShift) }} | Rp {{ formatNum(reconReport.totalRiwayat) }} | {{ reconReport.totalDiff === 0 ? '✓ 0' : (reconReport.totalDiff > 0 ? '+' : '') + 'Rp ' + formatNum(reconReport.totalDiff) }} | |
🧾 {{ reconReport.nullPaid.length }} transaksi lunas tanpa waktu bayar — tidak terhitung pada filter tanggal maupun laporan shift
Perbaiki dengan memperbarui waktu pembayaran transaksi agar tercatat pada tanggal & shift yang benar.
🕒 {{ reconReport.outside.length }} transaksi lunas di luar semua jendela shift (masuk Riwayat, tidak masuk Laporan Shift)
Cocokkan lewat filter tanggal di Riwayat, atau abaikan bila pembayaran memang terjadi di luar jam shift.
Total Pendapatan
Rp {{ formatNum(reports.total_revenue) }}
Transaksi Selesai
{{ reports.total_transactions }} Transaksi
Pendapatan Hari Ini
Rp {{ formatNum(reports.today_revenue) }}
Transaksi Hari Ini
{{ reports.today_transactions }} Transaksi
Pesanan Menunggu
{{ reports.pending_orders }} Pending
Hutang: Rp {{ formatNum(reports.pending_total) }}
Laporan Laba Rugi
Pendapatan penjualan, harga pokok (modal menu), biaya operasional & laba bersih.
HPP masih Rp 0 karena harga modal belum diisi. Untuk produk belum jadi (makanan) HPP memang 0, tetapi produk jadi (minuman) yang modalnya belum diisi membuat Laba Kotor & Margin di bawah terlihat lebih besar dari kenyataannya. Isi modalnya di menu Manajemen › Menu.
Margin Laba Bersih
Total: Rp {{ formatNum(reports.total_revenue) }}
{{ reports.profit_margin }}%
HPP dihitung dari harga modal menu. Biaya operasional diambil dari catatan pengeluaran kas (tab Kas).
Laporan Hutang — Pesanan Belum Lunas
Tagihan pelanggan yang masih menunggu pelunasan.
Total Hutang Aktif
Rp {{ formatNum(reports.pending_total) }}
| No. Order | Pelanggan | Tipe | Meja | Item | Total | Waktu | Kasir |
|---|---|---|---|---|---|---|---|
| Tidak ada hutang aktif — semua pesanan sudah lunas. 🎉 | |||||||
| {{ o.order_number }} | {{ o.customer_name || '-' }} | {{ o.type }} | {{ o.table_name || '-' }} | {{ o.items_count }}x | Rp {{ formatNum(o.total) }} | {{ formatDateTime(o.created_at) }} | {{ o.cashier || '-' }} |
| TOTAL HUTANG | Rp {{ formatNum(reports.pending_total) }} | ||||||
🏆 Menu Terlaris
{{ m.name }}
{{ m.total_qty }} terjual
Rp {{ formatNum(m.total_revenue) }}
⭐ Ulasan Pelanggan
⭐
{{ reports.review_stats?.average_rating || '0.0' }} / 5.0
{{ reports.review_stats?.total_reviews || 0 }} ulasan diterima
📊 Penjualan Produk
{{ productSales.length }} produk terjual📌 Menampilkan {{ formatNum(productSummary.qty) }} pcs terjual · Pendapatan Rp {{ formatNum(productSummary.revenue) }} sesuai filter di bawah (Riwayat Transaksi)
| No | Produk | Qty Terjual | Transaksi | Terakhir Dibeli | Pendapatan | Share |
|---|---|---|---|---|---|---|
| Belum ada penjualan produk pada periode ini. | ||||||
| {{ (productPage - 1) * productPerPage + i + 1 }} | {{ p.name }} | {{ p.qty }}x | {{ p.orders }} | {{ formatDateTime(p.last) }} | Rp {{ formatNum(p.revenue) }} |
|
📜 Riwayat Transaksi
{{ filteredPaidOrders.length }} selesai| No. Order | Pelanggan | Tipe | Metode | Shift | Tanggal / Waktu | Total | Aksi |
|---|---|---|---|---|---|---|---|
| Belum ada riwayat transaksi selesai. | |||||||
| {{ o.order_number }} | {{ o.customer_name || '-' }} | {{ o.type }} | {{ o.payment_method || '-' }} | {{ shiftBadge(o) }} — | {{ formatDateTime(o.paid_at || o.created_at) }} | Rp {{ formatNum(o.total) }} |
|
🧩 Fitur & Modul
Aktifkan / nonaktifkan modul aplikasi. Menu tab di bagian atas otomatis menyesuaikan. Untuk QR order meja, aktifkan satu atau keduanya: Bayar di Kasir & Bayar Sekarang QRIS.
Kitchen Display System (KDS)
Halaman dapur untuk memantau & memperbarui status pesanan masakan.
QR Order Meja
Pelanggan scan kode QR untuk melihat menu & memesan sendiri dari meja.
Bayar di Kasir (QR Order)
Izinkan pelanggan memilih 'Bayar di Kasir' saat order meja QR & melunasi di kasir.
QRIS Bayar Sekarang
Izinkan pelanggan memilih 'Bayar Sekarang' & lunasi via QRIS langsung saat order meja QR.
Kas Restoran
Modul pencatatan uang masuk & keluar kas.
Laporan & Rekap
Ringkasan pendapatan, top menu, dan ekspor laporan PDF/Excel.
Shift Kasir
Mewajibkan karyawan buka shift sebelum melayani transaksi.
🏪 Profil Restoran
Informasi yang tampil pada struk pembayaran dan halaman menu digital.
Cloudflare Turnstile
OPSIONALProteksi halaman pemesanan publik dari bot. Widget captcha gratis dari Cloudflare. Kosongkan jika tidak dipakai.
💳 Pajak & Pembayaran
Atur persentase pajak restoran dan metode pembayaran yang tersedia di kasir.
📲 Pembayaran QRIS Otomatis
Aktifkan agar pembayaran QRIS terdeteksi otomatis oleh aplikasi notifier di HP kasir, lalu order langsung menjadi LUNAS tanpa konfirmasi manual.
Aktifkan Notifikasi QRIS
Terima pembayaran QRIS secara otomatis dari aplikasi notifier.
Salin token ini ke aplikasi notifier agar hanya aplikasi tersebut yang bisa memicu pembayaran.
Isi di aplikasi notifier (APK) bersama token. Server harus dapat diakses dari HP kasir.
🖨️ Printer Thermal Struk
Struk langsung dicetak ke printer thermal Bluetooth 58/80mm dari perangkat yang menjalankan SakaPOS. Pilih lebar kertas, cari & pilih printer Bluetooth di bawah, lalu aktifkan — struk otomatis dikirim setelah pembayaran lunas.
Aktifkan Cetak Struk Otomatis
Setelah transaksi lunas, struk otomatis dikirim ke printer Bluetooth terpilih.
🧑🍳 Cetak Struk Dapur
Cetak tiket pesanan untuk dapur secara otomatis setelah transaksi lunas (dipisah dari struk kasir, tanpa harga). Tombol cetak dapur juga tersedia di form cetak struk kasir.
Pilih printer Bluetooth thermal (58/80mm) dari daftar perangkat yang muncul setelah tombol cari diklik. Tombol Uji Cetak Struk akan mengirim langsung ke printer terpilih.
Terisi otomatis saat memilih perangkat dari daftar Bluetooth.
🔄 Shift Kasir
Atur daftar sesi shift. On/off sistem shift dikelola di .
Nama & jam sesi membantu kasir memilih sesi saat membuka shift. Jam lintas tengah malam didukung (mis. Malam 22:00 - 06:59).
👥 Akun Pengguna & Peran
Kelola akun login staf restoran dan hak aksesnya.
| Nama | Peran | Aksi | |
|---|---|---|---|
| {{ u.name }} Anda | {{ u.email }} | {{ roleLabel(u.role) }} |
|
📖 Menu Restoran
Kelola daftar menu, harga, kategori & ketersediaan stok.
🗂️ Kategori Menu
{{ item.name }}
Rp {{ formatNum(item.price) }}
🪑 Meja Restoran
Kelola nomor meja, kapasitas dan status. Klik sakelar untuk ubah status.
{{ t.number }}
Kapasitas {{ t.capacity }}
📱 Kode QR Pemesanan Meja
Cetak & tempel di meja. Pelanggan scan untuk pesan langsung ke dapur.
{{ settingsForm.resto_name || 'Resto' }}
{{ t.number }}
Kapasitas {{ t.capacity }}
Cara Order
1. Scan kode QR di atas
2. Pilih menu & jumlahnya
3. Kirim ke dapur, lalu bayar di kasir atau Bayar Sekarang QRIS
3. Kirim ke dapur, lalu bayar di kasir
👤 Pelanggan
Daftar pelanggan — dipilih cepat lewat kolom nama saat transaksi POS.
{{ editingCustomerId ? '✏️ Edit Pelanggan' : '➕ Pelanggan Baru' }}
| Nama | No. HP | Catatan | Jml Order | Aksi |
|---|---|---|---|---|
| {{ c.name }} | {{ c.phone || '-' }} | {{ c.notes || '-' }} | {{ orders.filter(o => o.customer_name === c.name).length }} |
|
| Belum ada pelanggan terdaftar. Tambahkan lewat tombol di atas. | ||||
⭐ Ulasan Pelanggan
Rating & komentar dari pelanggan menu digital QR & kasir.
Rata-rata Rating
{{ reviewsAvg }} / 5
Total Ulasan
{{ reviews.length }}
Positif (4-5)
{{ reviewsPositive }}
Rendah (1-2)
{{ reviewsNegative }}
{{ r.customer_name || 'Pelanggan' }}
{{ r.table_name ? 'Meja ' + r.table_name : 'Walk-in' }} • {{ formatDateTime(r.created_at) }}
{{ r.comment }}
Tanpa komentar tertulis.
Belum ada ulasan pelanggan.
Ulasan akan muncul di sini setelah pelanggan memberi rating.
🕘 Riwayat Perubahan
Keterangan fitur baru & perbaikan bug tiap versi aplikasi. Saat ini terpasang versi v{{ appVersion }}.
v{{ item.version }} — {{ item.date }} TERPASANG
{{ item.subject }}
- {{ line }}
💾 Backup Data
Unduh seluruh data aplikasi (transaksi, menu, kategori, meja, kas, shift, ulasan, akun & pengaturan) ke file JSON. Simpan file ini di tempat aman untuk cadangan / pindah perangkat.
📥 Pulihkan Data
Pilih file backup .json lalu pulihkan. Seluruh data aplikasi saat ini akan DIGANTI oleh isi file backup.
🔄 Riset Data
Hapus SEMUA transaksi, pesanan, menu, kategori, meja, ulasan, kas & shift. Akun & pengaturan TIDAK ikut terhapus. Tindakan ini tidak bisa dibatalkan — unduh backup dulu sebelum melanjutkan.
{{ confirmState.title }}
{{ confirmState.message }}
👤 Profil Saya
{{ user.name }}
{{ user.email }}
{{ user.role }}🔒 Ganti Password
🔄 Pembaruan Aplikasi
{{ String(sec.label).replace(/^#\s*/, '') }}
Yang baru
- ▸{{ n }}
{{ updateInfo.error }}