Konsep Modul Reservasi
Modul Reservasi dipakai usaha yang menjual waktu pemakaian sebuah tempat: lapangan futsal atau badminton, studio, ruang rapat, serta kamar atau vila yang disewa per malam, per bulan, atau per tahun. Pelanggan memesan sendiri lewat halaman /booking dan membayar uang muka secara online, sedangkan admin memantau semuanya di Kalender Reservasi (tabel harian dan Grafik unit) dan mencatat check-in serta check-out. Baca halaman ini dulu sebelum membuka form mana pun.
Apa yang Dikerjakan Modul Ini
- Pelanggan membuka halaman /booking, login dengan akun pelanggan, memilih tipe (grup produk sewa), tanggal, dan durasi (atau jumlah malam, bulan, atau tahun), lalu memilih jadwal yang tersedia. Pelanggan memesan tipe, bukan lapangan tertentu: sistem menempatkan reservasi pada unit pertama yang kosong menurut urutan nama.
- Sistem menghitung harga di server dan menahan jadwal selama 15 menit sampai uang muka dibayar lewat gateway pembayaran online. Tipe tanpa uang muka (0%) langsung Dikonfirmasi.
- Admin melihat jadwal per tanggal di Kalender Reservasi dan per unit di Grafik unit, membuat reservasi untuk pelanggan yang datang atau menelepon, memindahkan, membatalkan, melakukan check-in dan check-out, dan membaca laporan.
- Dua orang tidak mungkin mendapat unit dan waktu yang sama: pemesan kedua langsung ditolak dengan pesan jadwal baru saja dipesan.
Satuan Reservasi: Per Slot, Per Malam, Per Bulan, Per Tahun
Cara sebuah tempat dipesan ditentukan oleh Satuan Waktu pada produk sewanya.
| Satuan Waktu produk sewa | Cara dipesan | Harga dan jadwal |
|---|---|---|
| Menit atau Jam (per slot) | Tanggal, jam mulai, dan durasi (kelipatan panjang slot grup, paling banyak 24 slot). Hanya di dalam Jam Buka. | Harga satu slot = harga satuan x panjang slot / lama satuan waktu. Jadwal harus belum dimulai. |
| Hari (per malam) | Tanggal check-in dan jumlah malam, 1 sampai 365. Jam check-in dan check-out harian diambil dari Batas Waktu Mulai dan Batas Waktu Selesai pada produk sewa (Batas Waktu Selesai 0 = sama dengan jam check-in). Jam Buka tidak dipakai. | Satu malam = satu harga satuan. Tanggal hari ini masih boleh dipesan walau jam check-in sudah lewat. Check-out pukul 12:00 dan check-in pukul 14:00 membuat tamu yang keluar dan masuk di hari yang sama tidak bentrok. |
| Bulan | Tanggal mulai dan jumlah bulan, 1 sampai 36, dari tanggal ke tanggal pukul 00:00. Tanggal yang tidak ada di bulan tujuan dijepit ke akhir bulan (31 Januari + 1 bulan = 28 atau 29 Februari). | Satu bulan = satu harga satuan. Jam Buka tidak dipakai. |
| Tahun | Tanggal mulai dan jumlah tahun, 1 sampai 10. | Satu tahun = satu harga satuan. Jam Buka tidak dipakai. |
Yang Belum Ada di Versi Ini
Agar tidak salah menjanjikan ke pelanggan Anda, perhatikan batas berikut.
- Faktur POS hasil check-in belum dilunasi otomatis: kasir yang menyelesaikannya dan memakai uang muka sebagai pembayaran. Belum ada tagihan tambahan lain selain biaya check-in awal dan check-out terlambat.
- Menandai refund sudah dikembalikan hanya ada di menu batang Grafik unit untuk reservasi yang masih tampil di grafik. Refund dari pembatalan atau pembayaran terlambat belum punya tombolnya; catat pengembaliannya di keuangan, jumlahnya tetap tampil di kolom Perlu Refund.
- Kasir belum otomatis menolak meja yang sudah dipesan pelanggan untuk jam itu. Yang berlaku sebaliknya: meja yang sedang berjalan di kasir tidak bisa dipesan lewat portal pada jam berjalan itu. Grafik unit memberi ikon kasir pada unit yang punya faktur kasir terbuka.
- Belum ada booking berulang otomatis (misalnya tiap Selasa 19:00 selama 3 bulan) dan belum ada notifikasi WhatsApp; pemberitahuan hanya lewat email.
- Status Tidak hadir ada di filter laporan, tetapi belum ada yang mengisinya.
- Pelanggan tidak bisa membatalkan sendiri. Pembatalan hanya oleh admin. Pelanggan boleh memindahkan jadwal.
Istilah yang Dipakai
| Istilah | Artinya |
|---|---|
| Grup Produk Sewa (tipe reservasi) | Kelompok yang dijual, misalnya Lapangan Mini Soccer. Ini adalah Grup Meja yang sama dengan yang dipakai POS (menu Daftar Grup Produk Sewa); toggle Bisa Direservasi membuatnya bisa dipesan, dan di halaman /booking ia disebut "Tipe reservasi". Grup menentukan panjang slot, divisi, persentase uang muka, sebutan unit, dan produk biaya check-in awal dan check-out terlambat. |
| Produk Sewa (unit) | Tempat fisik yang dipesan, misalnya Lapangan A dan Lapangan B, atau Kamar 101. Ini adalah baris Daftar Produk Sewa (meja POS) yang ditandai Disewakan, dengan produk dan satuan waktu (Menit, Jam, Hari, Bulan, atau Tahun) yang menentukan harga dan cara pesannya. Karena meja POS yang sama, kasir memakai tempat yang sama dengan yang dipesan pelanggan. |
| Sebutan Unit | Kata yang dibaca pelanggan dan admin untuk menyebut unit pada sebuah grup: Lapangan, Kamar, Meja, Studio, atau kata lain. Diisi di Grup Produk Sewa. Kosong berarti sebutan bawaan bahasa (Meja pada bahasa Indonesia, Table pada bahasa Inggris). Per grup, jadi satu usaha boleh memakai Lapangan dan Ruang Rapat sekaligus. |
| Slot | Satu potongan waktu pada satu unit, panjangnya mengikuti grup. Reservasi 2 jam pada grup 60 menit menahan dua slot berurutan. Pada sewa per malam, bulan, atau tahun, satu sel adalah satu malam, satu bulan, atau satu tahun. |
| Jam Buka | Rentang jam yang boleh dipesan, diatur per grup per hari dalam seminggu, hanya untuk grup bersatuan Menit atau Jam. Hari tanpa jam buka berarti tutup. |
| Blokir Jadwal | Menutup sebuah produk sewa pada rentang waktu tertentu, misalnya untuk perawatan rumput atau renovasi kamar. Berlaku untuk semua satuan. |
| Uang Muka | Bagian dari total yang dibayar saat memesan. Tercatat di Uang Muka Pelanggan dan bisa dipakai sebagai pembayaran di kasir. Sisanya dibayar di kasir saat pelanggan datang, pada meja POS yang sama. |
| Check-in, Check-out | Tanda pelanggan mulai dan selesai memakai unit, dari Kalender Reservasi atau form Reservasi Pelanggan. Check-in membuka faktur POS di meja itu; check-out melepas sisa jadwal yang belum terpakai. |
| Grafik unit | Tab di Kalender Reservasi yang menampilkan tiap unit terhadap tanggal (7, 14, atau 31 hari) seperti bagan kamar hotel. |
Yang Harus Siap Sebelum Mulai
- Fitur Transaksi Rental aktif pada paket Anda. Tanpa fitur ini menu Reservasi tidak muncul dan halaman /booking menolak semua permintaan.
- Produk jasa untuk disewakan, misalnya "Sewa Lapangan" atau "Kamar Deluxe", dengan satuan dasar (jumlah 1) misalnya "Jam" atau "Malam" dan harga jual terisi pada tiap level harga. Harga itu berlaku per satuan waktu meja; pada meja berasatuan Jam, slot 30 menit otomatis dihitung setengahnya. Pada meja berasatuan Hari, Bulan, atau Tahun, satu malam, bulan, atau tahun sama dengan satu harga satuan.
- Satu Jenis Pembayaran berjenis Uang Muka Penjualan yang aktif bila ada grup dengan uang muka (lebih dari 0%). Tanpa ini pelanggan tidak bisa memesan grup itu dan halaman /booking menampilkan peringatan untuk admin. Grup dengan Uang Muka Minimal 0% tidak membutuhkannya. Akun pada jenis pembayaran ini menerima kredit setiap uang muka reservasi, jadi pastikan itu akun kewajiban uang muka pelanggan, bukan akun kas atau bank.
- Sedikitnya satu Jenis Pembayaran gateway online yang aktif dan bisa dibayar pelanggan sendiri tanpa kasir. Jenis yang butuh kasir, seperti QRIS statis, tidak ditawarkan di halaman /booking.
- Pengaturan email (SMTP) bila Anda ingin pelanggan menerima pemberitahuan. Pada server sendiri yang pengaturan SMTP-nya kosong, email tidak dikirim dan tidak ada pesan galat.
- Role pengguna admin diberi akses ke menu Reservasi: Kalender Reservasi untuk membuat, memindahkan, membatalkan, grafik, dan laporan; Reservasi Pelanggan untuk check-in dan check-out. Server menolak aksi itu dari role yang tidak punya menunya. Lihat bagian Masalah Umum.
- Untuk check-in: satu sesi POS meja yang aktif dan memuat produk sewa itu, dengan pelanggan, salesman, divisi, dan pengiriman default terisi.
Urutan Menyiapkan
- Buat Grup Produk Sewa (menu Penjualan & POS): nyalakan Bisa Direservasi, lalu isi panjang slot, Uang Muka Minimal (%), Sebutan Unit (Lapangan, Kamar, Meja, dan seterusnya), divisi, dan bila perlu produk biaya check-in awal dan check-out terlambat.
- Buat Produk Sewa untuk tiap lapangan atau kamar yang dipesan: pilih grup tadi, nyalakan Disewakan, pilih produk, dan isi satuan waktu (Jam untuk lapangan, Hari untuk kamar per malam). Untuk sewa per malam isi juga Batas Waktu Mulai dan Selesai sebagai jam check-in dan check-out. Langkah 1 dan 2 dijelaskan di halaman Menyiapkan Produk Sewa untuk Reservasi.
- Untuk grup per slot, isi Jam Buka Reservasi untuk tiap hari yang buka. Satu hari boleh punya lebih dari satu rentang, misalnya pagi dan malam. Grup per malam, bulan, dan tahun tidak memakai jam buka.
- Bila perlu, tambah Aturan Diskon Penjualan pada produk untuk harga jam puncak atau akhir pekan (lihat bagian Cara Harga Dihitung).
- Bagikan tautan portal kepada pelanggan. Cara termudah: buka menu Portal Reservasi Pelanggan, lalu salin alamat yang terbuka di tab baru. Pada layanan berlangganan (SaaS), tautan wajib memuat kode tenant, yaitu /booking?tenantId=KODE-TENANT; tanpa itu halaman tidak tahu usaha mana yang dimaksud.
- Uji satu kali dari awal: buat akun pelanggan, pesan jadwal, bayar uang muka, lalu lihat hasilnya di Kalender Reservasi.
Cara Harga dan Uang Muka Dihitung
Harga selalu dihitung server, bukan oleh browser pelanggan, dan dihitung per sel (per slot, malam, bulan, atau tahun) lalu dijumlahkan. Harga yang tampil di portal adalah harga unit yang akan ditempati.
- Harga dasar sebuah sel adalah harga jual produk meja pada satuan dasarnya, menurut Level Harga pelanggan. Pada sewa per slot, harga itu disesuaikan dengan panjang slot terhadap satuan waktu meja (slot 60 menit pada meja berasatuan Jam = harga satu jam). Pada sewa per malam, bulan, atau tahun, harga satuan dipakai apa adanya per periode. Pelanggan member bisa diberi level harga lain; bila harga pada level itu kosong, dipakai harga level 1, sama seperti di kasir. Reservasi yang dibuat admin memakai level harga 1.
- Aturan Diskon Penjualan pada produk itu dievaluasi untuk setiap sel: jenis harga mengganti harga, jenis persen memberi diskon persen, jenis nilai mengurangi nominal.
- Total adalah jumlah harga semua sel. Uang muka adalah total dikali Uang Muka Minimal (%) pada grup, dibulatkan dua desimal.
- Contoh jenis harga untuk jam puncak (mulai pukul 18) dan akhir pekan naik 30%:
detail.slotdayofweek >= 6 || detail.slothour >= 18 ? detail.baseprice * 1.3 : detail.baseprice - Contoh jenis persen untuk pagi hari kerja diskon 20%:
detail.slotdayofweek <= 5 && detail.slothour < 12 ? 20 : 0 - Contoh untuk kamar per malam, malam Jumat dan Sabtu +25%:
detail.slotdayofweek == 5 || detail.slotdayofweek == 6 ? detail.baseprice * 1.25 : detail.baseprice(tanggal sel adalah tanggal malam itu). - Aturan pada produk sewa juga dihitung saat produk itu dijual di Point of Sale, TableOrder, toko online, dan form penjualan, misalnya sewa langsung tanpa reservasi. Di sana
detail.slotdate,detail.slothour, dandetail.slotdayofweekberisi waktu penjualan, dandetail.basepriceberisi harga daftar level pelanggan, jadi contoh di atas tetap berlaku menurut jam transaksi di kasir.
| Variabel aturan | Isinya |
|---|---|
detail.baseprice |
Harga dasar sel menurut level harga pelanggan. |
detail.slotdate |
Tanggal sel (pada sewa per malam, tanggal malam itu), misalnya 2026-10-18. |
detail.slothour |
Jam mulai slot, 0 sampai 23. Pada sewa per malam, bulan, dan tahun selalu 0. |
detail.slotdayofweek |
Hari dalam minggu: 1 Senin sampai 7 Minggu. Pada sewa per periode, hari tanggal awal periode itu. |
detail.bookingunit |
slot, day, month, atau year pada reservasi; kosong saat aturan dievaluasi di kasir. |
currenthour atau currentday pada aturan reservasi: keduanya berarti waktu pesanan dibuat, bukan waktu pemakaian. Tulis harga selalu relatif terhadap detail.baseprice; angka tetap seperti ? 400000 : 300000 menimpa harga level pelanggan sehingga member kehilangan harganya. Di kasir, aturan produk hanya dihitung untuk pelanggan yang juga punya aturan diskon penjualan; pada reservasi, aturan produk berlaku untuk semua pelanggan.Perjalanan Sebuah Reservasi
| Status | Artinya | Jadwal |
|---|---|---|
| Menunggu pembayaran | Dibuat pelanggan, uang muka belum masuk. Batas bayar 15 menit. | Ditahan |
| Dikonfirmasi | Uang muka diterima, atau tanpa uang muka (0%), atau dibuat admin. | Ditahan |
| Sedang digunakan | Sudah check-in. Faktur POS terbuka di meja itu. | Ditahan |
| Selesai | Sudah check-out. | Sisa jadwal yang belum dimulai dilepas |
| Kedaluwarsa | Uang muka tidak masuk sebelum batas waktu. | Dilepas |
| Pembayaran terlambat | Uang muka masuk setelah reservasi kedaluwarsa. Dananya masuk antrean refund manual. | Sudah dilepas |
| Dibatalkan | Dibatalkan admin. Uang yang sudah masuk menjadi refund manual. | Dilepas |
Check-in dan Check-out
- Tombolnya ada di Kalender Reservasi (baris tabel dan menu batang Grafik unit) dan di form Reservasi Pelanggan. Server meminta menu Reservasi Pelanggan pada role untuk kedua aksi ini.
- Check-in bisa dilakukan dari tanggal mulai reservasi sampai sebelum waktu sewa berakhir. Sebelum jam mulai disebut check-in awal: hanya bila unit tidak dipakai atau dipesan orang lain sampai jam mulai, dan dikenai biaya per jam bila grup mengisi Produk Biaya Check-in Awal.
- Check-in membuka faktur POS di meja produk sewa itu, atas nama pelanggan reservasi (atau pelanggan default POS untuk reservasi walk-in). Fakturnya berisi baris sewa dengan harga yang dijanjikan saat reservasi (sudah memuat aturan jam puncak dan akhir pekan) dan, bila ada, baris biaya check-in awal. Baris reservasi itu tidak dihitung ulang oleh kasir; pesanan tambahan masuk ke faktur yang sama.
- Check-out bisa kapan saja sesudah check-in, juga sesudah jadwal habis. Terlambat dikenai biaya per jam bila grup mengisi Produk Biaya Check-out Terlambat; biayanya ditulis ke faktur check-in bila masih terbuka, dan bila faktur sudah ditutup muncul peringatan agar biayanya ditagih lewat transaksi kasir. Check-out mencatat jam selesai di meja dan melepas sisa jadwal yang belum dimulai.
- Biaya = jam di luar jadwal (dibulatkan ke atas ke jam penuh) x harga jual produk biaya menurut level harga pelanggan. Sebelum menyimpan, petugas melihat jumlah jam dan tarifnya dan boleh mengubah jam yang ditagih (0 = gratis). Tanpa produk biaya, atau bila harganya 0, tidak ada biaya.
Uang Muka, Sisa Bayar, dan Refund
- Setiap uang yang diterima gateway untuk sebuah reservasi dicatat di Uang Muka Pelanggan, satu baris per reservasi dengan catatan "Uang muka reservasi" diikuti nomor reservasi, dan dijurnal: debit akun jenis pembayaran gateway, kredit akun jenis pembayaran Uang Muka Penjualan.
- Saldo uang muka yang bisa dipakai di kasir sama dengan uang muka jadwal yang berlaku. Bagian yang harus dikembalikan langsung tidak bisa dipakai, dan reservasi yang dibatalkan atau kedaluwarsa bersaldo 0.
- Saat pelanggan datang, pakai uang muka itu sebagai pembayaran (jenis bayar Uang Muka Penjualan) di kasir, lalu terima sisanya. Bila sudah check-in, selesaikan faktur POS yang dibuka check-in di meja yang sama.
- Reservasi buatan admin tidak memiliki uang muka. Pembayarannya dicatat di kasir saat pelanggan membayar.
- Faktur check-in memuat harga sewa sesuai reservasi, jadi tamu yang memesan malam Minggu dan check-out hari Senin tetap ditagih harga yang dijanjikan. Bila sewa dibuat langsung di kasir tanpa reservasi, harganya dihitung kasir menurut produk, lama sewa, dan aturan harga pada jam transaksi.
- Refund manual. Aplikasi mencatat nilai yang harus dikembalikan (kolom Perlu Refund) dan menahannya dari saldo kasir. Uang dikembalikan di luar aplikasi, misalnya transfer bank, dan jurnal pengembaliannya (debit Uang Muka Penjualan, kredit kas atau bank) dicatat oleh bagian keuangan.
- Refund muncul bila: admin membatalkan reservasi yang uangnya sudah masuk; pembayaran masuk setelah kedaluwarsa atau setelah dibatalkan; jadwal dipindah ke harga lebih murah; atau pelanggan membayar lebih, misalnya dua tagihan sama-sama dibayar.
- Bila jadwal dipindah kembali ke harga lebih mahal sebelum refund dikembalikan, refund itu batal karena uangnya dipakai lagi sebagai uang muka.
Pemberitahuan Email
- Pelanggan menerima email saat reservasi tanpa uang muka dikonfirmasi, uang muka diterima, jadwal berubah (oleh pelanggan atau admin), reservasi dibatalkan, dan pembayaran terlambat.
- Pelanggan tanpa alamat email, atau reservasi walk-in buatan admin, tidak mendapat email.
- Bila email gagal terkirim, reservasi tetap tersimpan dan kegagalannya tercatat sebagai kejadian "emailfailed" di Riwayat Reservasi.
Masalah Umum
| Gejala | Penyebab dan cara memeriksa |
|---|---|
| Menu Reservasi tidak terlihat | Fitur Transaksi Rental belum aktif, atau role Anda belum diberi akses ke menu-menu Reservasi. Minta admin memperbarui akses role. |
| Halaman /booking menolak atau menampilkan tenant tidak terdaftar (SaaS) | Tautan tidak memuat ?tenantId=KODE-TENANT. Salin tautan dari menu Portal Reservasi Pelanggan. |
| Tipe tidak muncul di pilihan /booking padahal Bisa Direservasi menyala | Grup belum punya produk sewa yang aktif, Disewakan, berproduk, dan bersatuan waktu Menit, Jam, Hari, Bulan, atau Tahun; atau satuan produk sewanya campur dalam satu grup. |
| Pelanggan tidak menemukan jadwal sama sekali | Grup per slot belum punya Jam Buka untuk hari itu, atau tanggalnya sudah lewat. Jadwal yang sudah lewat, penuh, atau diblokir tampil Terisi atau Penuh. |
| Pelanggan melihat "Admin perlu mengaktifkan jenis pembayaran uang muka penjualan" | Belum ada Jenis Pembayaran berjenis Uang Muka Penjualan yang aktif. |
| Satu lapangan tidak pernah ditempati padahal yang lain terpakai | Produk sewa itu belum Disewakan, belum memilih produk, produknya tidak punya satuan dasar (jumlah 1) yang aktif, atau satuan waktunya tidak bisa dipesan. Unit yang harganya tidak bisa dihitung dilewati dan unit lain dipakai. |
| Jadwal tampil Penuh padahal tidak ada reservasi | Semua unit grup itu sedang berjalan sebagai sesi sewa di kasir (POS), diblokir lewat Blokir Jadwal, atau sudah dipesan pada rentang yang bersinggungan. |
| Pesan "Uang Muka Minimal (%): 0 - 100." saat menyimpan grup | Persentase negatif atau lebih dari 100. Nol adalah sah (tanpa uang muka); isi 0 sampai 100. |
| Pesan satuan waktu harus sama saat menyimpan grup atau produk sewa | Produk sewa dalam grup yang Bisa Direservasi harus bersatuan sama: menit/jam, hari, bulan, atau tahun. Pisahkan ke grup lain. |
| "Jadwal berada di luar jam buka" | Hanya untuk grup per slot. Jam mulai harus jatuh pada kelipatan panjang slot dihitung dari jam buka, dan jam selesai tidak boleh melewati jam tutup. |
| Harga hasil aturan berbeda dari harapan | Periksa jenis aturan dan pastikan rumusnya relatif terhadap detail.baseprice. Bila beberapa aturan sejenis berlaku, yang terakhir menang. |
| Pelanggan sudah bayar tetapi status masih Menunggu pembayaran | Konfirmasi gateway diperiksa saat pelanggan membuka kembali Reservasi saya. Minta pelanggan memuat ulang halaman setelah membayar. |
| Saldo uang muka di kasir lebih kecil dari yang dibayar pelanggan | Sebagian uangnya menjadi refund: jadwal dipindah ke harga lebih murah, reservasi dibatalkan, atau pelanggan membayar lebih. Lihat kolom Perlu Refund di Laporan. |
| Check-in ditolak | Tanggal mulai belum tiba atau waktu sewa sudah habis; belum ada sesi POS meja aktif yang memuat unit itu, atau ada lebih dari satu; meja masih punya faktur POS terbuka; pelanggan, salesman, divisi, atau pengiriman default POS belum lengkap; atau check-in awal ditolak karena unit masih dipakai atau sudah dipesan sebelum jadwal ini. Pesan galatnya menyebut yang mana. |
| Check-out ditolak | Faktur POS meja sudah berganti sejak check-in; periksa faktur POS lebih dulu. Check-out sesudah jadwal habis tidak ditolak, tetapi dikenai biaya terlambat bila grup mengaturnya. |
| Biaya check-out terlambat tidak masuk faktur | Faktur check-in sudah ditutup sebelum check-out. Server menampilkan peringatan dengan jumlah biayanya; tagih lewat transaksi kasir. |