Logo Mediatama Portal Soal / Tema 04
LEMBAR SPESIFIKASI PROYEK PRAKTIK • TEMA 04

Sistem Reservasi & Sewa Lapangan Olahraga

Pemesanan Slot Jadwal Lapangan Futsal, Badminton, dan Sewa Perlengkapan

KODE: MED-WEB-04
TINGKAT: Intermediate
Mata Uji Fullstack Web App
Estimasi Waktu 3 - 4 Jam / Take-home
Sifat Pengerjaan Open Book & Docs
Tech Stack Bebas Dipilih Peserta
Kebebasan Pilihan Teknologi: Anda dibebaskan memilih bahasa pemrograman, framework, arsitektur, dan database yang paling Anda kuasai (misalnya: Laravel, CodeIgniter, Express.js/Node.js, Next.js, Django, FastAPI, Go Gin/Fiber, PHP Native, Vue/React, serta database MySQL, PostgreSQL, MariaDB, atau SQLite). Penilaian menitikberatkan pada kelengkapan 4 modul utama, integritas alur transaksi, keamanan, dan pengalaman pengguna (UX).

Latar Belakang & Studi Kasus

Pusat olahraga 'Champions Sports Arena' memiliki beberapa lapangan (2 lapangan futsal rumput sintetis, 3 lapangan badminton vinil, dan 1 lapangan basket). Pengelola mengalami masalah bentrok jadwal booking antara tim yang memesan via WhatsApp dan tim yang datang langsung. Selain itu, sering timbul perselisihan pelunasan uang muka (DP) dan sewa perlengkapan (sepatu, rompi, bola, raket). Aplikasi web dibutuhkan untuk memvisualisasikan slot jadwal yang tersedia, mencatat reservasi, menangani pembayaran DP dan pelunasan, serta mencetak bukti sewa.

4 Modul Wajib yang Harus Dibangun

Pilar Inti Fungsionalitas
01

Modul Autentikasi & Hak Akses (Login System)

Pengamanan akun, sesi pengguna, dan pembatasan wewenang fitur

Role: Administrator / Pengelola Fasilitas

Konfigurasi tarif lapangan (harga jam reguler vs jam malam/weekend), kelola jadwal perawatan lapangan, manajemen user, dan analisis keuangan serta okupansi fasilitas.

Role: Operator / Kasir Front Office

Melihat jadwal ketersediaan lapangan, membuat booking baru, menerima pembayaran DP / Pelunasan, menambahkan sewa perlengkapan atau pembelian minuman, dan cetak tanda terima booking.

Ketentuan Keamanan & Teknis:
  • Form login dengan validasi input (penanganan username/email salah atau password tidak cocok).
  • Password wajib di-hash menggunakan algoritma aman (Bcrypt, Argon2, atau sejenisnya). Tidak boleh menyimpan password plaintext.
  • Proteksi route (Middleware / Guard): Halaman dashboard, transaksi, dan laporan tidak boleh dapat diakses tanpa login.
  • Mekanisme Logout yang menghancurkan sesi / token secara bersih dan mengarahkan kembali ke halaman login.
02

Modul Dashboard Eksekutif (Metrics & Overview)

Pusat pemantauan kinerja real-time dan ringkasan operasional

4 Indikator KPI Utama yang Wajib Ditampilkan:
Booking Hari Ini
Jumlah slot jadwal pertandingan yang dipesan pada hari ini
Tingkat Okupansi Lapangan
Persentase jam lapangan terisi dibanding total kapasitas jam operasional
Pendapatan Sewa Bulan Ini
Akumulasi pembayaran sewa lapangan dan rental alat
Total Tagihan Belum Lunas (DP)
Akumulasi sisa pembayaran sewa yang harus dilunasi saat tim datang bermain
Komponen Visual Pendukung:
  • Grafik Visual: Tampilkan visualisasi tren transaksi (misal: grafik batang/garis 7 hari terakhir atau diagram distribusi kategori). Boleh menggunakan Chart.js, ApexCharts, SVG interaktif, atau visual bar CSS murni.
  • Tabel Riwayat Cepat: Daftar 5–10 transaksi paling baru beserta status singkatnya.
  • Tombol Aksi Cepat (Quick Action): Shortcut langsung untuk membuat transaksi baru tanpa harus membuka menu lain.
03

Modul Transaksi Inti (Core Business Transaction)

Pencatatan data dinamis master-detail dengan kalkulasi otomatis

Format Nomor Faktur / Invoice: BOOK-YYYYMMDD-XXXX (Contoh: BOOK-20261023-0018)
Nomor invoice harus dibuat otomatis oleh sistem saat form dibuka atau saat transaksi disimpan, dengan format teratur dan unik.
Alur & Elemen Input Form Transaksi:
  • •Identitas Pemesan: Nama Tim / Pelanggan, No. Telepon/WA Kontak
  • •Pemilihan Fasilitas: Lapangan (Futsal 1, Futsal 2, Badminton A, dsb.)
  • •Waktu Sewa: Tanggal Main, Jam Mulai s/d Jam Selesai (Durasi dalam Jam)
  • •Cek Ketersediaan Real-time: Sistem otomatis memeriksa ketersediaan slot jam pada tanggal dan lapangan yang dipilih
  • •Tambahan Sewa Alat & Kantin: Multi-baris (misal: Sewa Rompi 1 Lusin, Sewa Bola Tambahan, Air Mineral Dus) x Qty
  • •Kalkulasi Biaya: Tarif Lapangan (Durasi x Harga per Jam) + Total Tambahan Alat, Diskon Komunitas jika ada, Grand Total
  • •Skema Pembayaran: Status DP (Uang Muka) atau Pembayaran Penuh (Lunas), Sisa Pembayaran Terhitung Otomatis
  • •Status Reservasi: Menunggu DP, Terkonfirmasi (DP Diterima), Sedang Bermain, Selesai & Lunas, Dibatalkan
Validasi & Integritas Data Wajib:
  • ✓Pencegahan jadwal bentrok (Overlap prevention): Lapangan yang sama tidak boleh dibooking pada rentang jam yang bertubrukan
  • ✓Validasi durasi minimal pemesanan (minimal 1 jam)
  • ✓Pencegahan pembatalan sepihak tanpa pencatatan alasan
  • ✓Cetak Tanda Terima Reservasi (Voucher Booking) berisikan detail jadwal main dan status tagihan
04

Modul Laporan & Ekspor Data (Reporting & Analytics)

Penyajian rekap data historis, filter periode, dan pencetakan dokumen

Parameter Filter Dinamis:

Rentang tanggal pertandingan, Pilihan Lapangan, dan Status Pembayaran (Lunas, Masih DP, Batal)

Ringkasan Statistik (Summary Bar):

Total Jam Tersewa, Total Pendapatan Sewa Lapangan, Total Pendapatan Rental Alat, dan Sisa Piutang DP

Struktur Kolom Tabel Laporan:

No. Booking, Tgl Main, Jam, Lapangan, Nama Tim, Total Tarif, DP Masuk, Sisa Tagihan, Status Bayar

Kemampuan Ekspor:

Ekspor ke format PDF jadwal rekap dan berkas spreadsheet Excel/CSV

Rekomendasi Skema Basis Data (Database Design)

Dapat disesuaikan atau dikembangkan sesuai arsitektur pilihan Anda

5 Tabel
Nama Tabel Deskripsi & Saran Kolom Minimal
users Pengguna aplikasi (id, username, password_hash, nama_lengkap, role [admin/kasir], created_at)
courts Master lapangan (id, nama_lapangan, jenis_olahraga, tarif_reguler_per_jam, tarif_malam_per_jam, status_aktif)
addons Master sewa alat & kantin (id, nama_item, tipe [sewa/jual], harga_satuan, stok)
bookings Header reservasi (id, no_booking, nama_pemesan, nama_tim, no_hp, court_id, tanggal_main, jam_mulai, jam_selesai, durasi_jam, total_sewa_lapangan, total_addons, grand_total, uang_dp, sisa_bayar, status_bayar, status_booking, created_at)
booking_addons Detail tambahan sewa alat / minuman (id, booking_id, addon_id, harga_satuan, kuantiti, subtotal)

Rubrik Penilaian & Pembobotan

Total Nilai Maksimal: 100 Poin

Fungsionalitas & Kesesuaian Alur Bisnis 40 Poin

Semua 4 pilar (Login, Dashboard, Transaksi Master-Detail, Laporan) berfungsi utuh tanpa error saat diuji.

Integritas Data & Keamanan 25 Poin

Hashing password, proteksi route, pencegahan duplikasi data, validasi stok/kapasitas, dan transaction commit/rollback.

Desain Antarmuka (UI) & Pengalaman Pengguna (UX) 20 Poin

Tampilan rapi, responsif di mobile & desktop, feedback interaktif (notifikasi sukses/gagal), dan kemudahan navigasi.

Kualitas Kode & Dokumentasi 15 Poin

Struktur folder terorganisir (MVC / Clean Architecture), penamaan variabel deskriptif, dan panduan instalasi README.md.

Ketentuan Pengumpulan & Deliverables

Peserta wajib menyerahkan hasil pengerjaan berupa:

  1. Source Code Proyek: Diunggah ke repositori GitHub / GitLab publik atau diarsipkan dalam format .zip.
  2. Database Dump / Seeder: File database.sql atau seeder/migration yang sudah memuat data awal (sample demo data) untuk akun login dan master data.
  3. Dokumen README.md: Berisi daftar tech stack yang digunakan, langkah instalasi step-by-step, serta kredensial akun uji coba (email/username & password untuk masing-masing role).
Kembali ke Daftar 10 Tema