Kamus Data (Data Dictionary)

Silakan blok/select tabel di bawah ini, salin (Ctrl+C), dan tempel (Ctrl+V) langsung ke Microsoft Word.


Kamus data menjelaskan secara rinci spesifikasi teknis dari setiap tabel yang digunakan dalam sistem E-Ticketing Bus Online, meliputi nama kolom, tipe data, kunci (key), serta keterangan fungsinya.

1. Tabel users

Tabel ini digunakan untuk menyimpan seluruh data pengguna aplikasi yang terbagi menjadi tiga peran utama (*customer*, *admin*, *petugas*), serta kru bus (*driver* dan *conductor*).

Nama Kolom Tipe Data Kunci Keterangan
id INT(11) unsigned PK, Auto Increment ID unik untuk setiap pengguna
name VARCHAR(100) - Nama lengkap pengguna
email VARCHAR(100) Unique Alamat email unik untuk login
phone VARCHAR(20) - Nomor telepon aktif pengguna
password VARCHAR(255) - Kata sandi pengguna yang di-hash dengan BCrypt
role ENUM('customer', 'admin', 'petugas') - Hak akses sistem (default: 'customer')
bus_id INT(11) unsigned FK (buses.id) Afiliasi bus untuk kru (Null jika bukan kru)
crew_role ENUM('staff', 'driver_1', 'driver_2', 'conductor') - Peran spesifik kru bus (default: 'staff')
created_at DATETIME - Tanggal dan waktu akun didaftarkan
updated_at DATETIME - Tanggal dan waktu data akun diperbarui

2. Tabel buses

Tabel ini digunakan untuk menyimpan informasi armada bus PO Bus yang dimiliki.

Nama Kolom Tipe Data Kunci Keterangan
id INT(11) unsigned PK, Auto Increment ID unik untuk setiap armada bus
code VARCHAR(20) - Kode identifikasi bus (misal: PO-001)
name VARCHAR(100) - Nama atau lambung bus
type VARCHAR(50) - Tipe kelas bus (misal: Eksekutif, Ekonomi)
seat_layout JSON - Struktur tata letak denah kursi bus
total_seats INT(11) - Kapasitas total kursi bus
created_at DATETIME - Tanggal dan waktu armada bus ditambahkan
updated_at DATETIME - Tanggal dan waktu data armada diperbarui

3. Tabel routes

Tabel ini digunakan untuk menyimpan data rute perjalanan atau trayek antarkota yang dilayani.

Nama Kolom Tipe Data Kunci Keterangan
id INT(11) unsigned PK, Auto Increment ID unik untuk setiap rute
origin VARCHAR(100) - Terminal/Kota asal keberangkatan
destination VARCHAR(100) - Terminal/Kota tujuan akhir perjalanan
distance_km DECIMAL(8,2) - Jarak tempuh rute dalam satuan kilometer
estimated_duration INT(11) - Estimasi durasi perjalanan (dalam menit)
created_at DATETIME - Tanggal dan waktu rute ditambahkan
updated_at DATETIME - Tanggal dan waktu data rute diperbarui

4. Tabel schedules

Tabel ini digunakan untuk menyimpan jadwal keberangkatan bus beserta penetapan kru bus yang bertugas dan harga tiket.

Nama Kolom Tipe Data Kunci Keterangan
id INT(11) unsigned PK, Auto Increment ID unik untuk setiap jadwal perjalanan
route_id INT(11) unsigned FK (routes.id) Rute perjalanan yang ditempuh
bus_id INT(11) unsigned FK (buses.id) Armada bus yang ditugaskan
departure_time DATETIME - Tanggal dan jam keberangkatan bus
arrival_time DATETIME - Estimasi tanggal dan jam kedatangan
price DECIMAL(10,2) - Harga dasar tiket per kursi
status ENUM('scheduled', 'ongoing', 'completed', 'cancelled') - Status operasional jadwal (default: 'scheduled')
driver_1_id INT(11) unsigned FK (users.id) ID Supir Utama (driver 1) yang bertugas
driver_2_id INT(11) unsigned FK (users.id) ID Supir Cadangan (driver 2) jika ada
conductor_id INT(11) unsigned FK (users.id) ID Kondektur yang bertugas
created_at DATETIME - Tanggal dan waktu jadwal dibuat
updated_at DATETIME - Tanggal dan waktu jadwal diperbarui

5. Tabel promos

Tabel ini digunakan untuk menyimpan data voucher promo diskon yang dapat diklaim saat checkout tiket.

Nama Kolom Tipe Data Kunci Keterangan
id INT(11) unsigned PK, Auto Increment ID unik untuk setiap promo
code VARCHAR(30) Unique Kode promo/kupon unik (misal: MUDIKAMAN)
discount_type ENUM('percent', 'fixed') - Jenis diskon (persentase atau nominal tetap)
discount_value DECIMAL(10,2) - Nilai potongan harga
valid_from DATE - Batas awal tanggal kupon aktif
valid_until DATE - Batas akhir tanggal kupon aktif
usage_limit INT(11) - Kuota batas maksimum penggunaan kupon
created_at DATETIME - Tanggal dan waktu promo dibuat
updated_at DATETIME - Tanggal dan waktu promo diperbarui

6. Tabel bookings

Tabel ini digunakan untuk menyimpan data transaksi reservasi tiket bus oleh customer.

Nama Kolom Tipe Data Kunci Keterangan
id INT(11) unsigned PK, Auto Increment ID unik untuk setiap booking
booking_code VARCHAR(20) Unique Kode unik invoice pemesanan
user_id INT(11) unsigned FK (users.id) ID customer yang melakukan reservasi
schedule_id INT(11) unsigned FK (schedules.id) ID jadwal perjalanan yang dipesan
total_price DECIMAL(10,2) - Total tagihan akhir setelah potongan diskon
payment_status ENUM('pending', 'paid', 'failed', 'refunded') - Status transaksi pembayaran (default: 'pending')
booking_status ENUM('active', 'completed', 'cancelled') - Status keaktifan reservasi (default: 'active')
created_at DATETIME - Tanggal dan waktu pesanan dibuat
updated_at DATETIME - Tanggal dan waktu data pesanan diperbarui

7. Tabel booking_seats

Tabel ini digunakan untuk mencatat detail manifest nama penumpang beserta alokasi nomor kursi yang dipilih pada setiap transaksi booking.

Nama Kolom Tipe Data Kunci Keterangan
id INT(11) unsigned PK, Auto Increment ID unik baris manifest kursi
booking_id INT(11) unsigned FK (bookings.id) Referensi ke transaksi booking induk
seat_number VARCHAR(10) - Nomor kursi yang dipesan (misal: 1A, 2B)
passenger_name VARCHAR(100) - Nama penumpang yang menempati kursi tersebut

8. Tabel payments

Tabel ini menyimpan detail transaksi pembayaran digital dari payment gateway Midtrans.

Nama Kolom Tipe Data Kunci Keterangan
id INT(11) unsigned PK, Auto Increment ID unik transaksi pembayaran
booking_id INT(11) unsigned FK (bookings.id) ID booking yang dibayar
method VARCHAR(50) - Metode pembayaran (misal: bank_transfer, qris)
amount DECIMAL(10,2) - Jumlah nominal pembayaran yang disetor
transaction_id VARCHAR(100) - ID transaksi resmi dari Midtrans
status ENUM('pending', 'success', 'failed') - Status pelunasan pembayaran (default: 'pending')
paid_at DATETIME - Waktu tepat transaksi terbayar lunas

9. Tabel tickets

Tabel ini mencatat tiket elektronik penumpang yang diterbitkan otomatis setelah pembayaran lunas beserta log scanner boarding petugas.

Nama Kolom Tipe Data Kunci Keterangan
id INT(11) unsigned PK, Auto Increment ID unik tiket elektronik
booking_id INT(11) unsigned FK (bookings.id) ID booking transaksi asal
qr_code VARCHAR(255) - Data token enkripsi untuk QR Code e-ticket
status ENUM('issued', 'boarded', 'expired') - Status boarding tiket (default: 'issued')
scanned_by INT(11) unsigned FK (users.id) ID petugas scanner yang memindai tiket
scanned_at DATETIME - Tanggal dan waktu pemindaian boarding
issued_at DATETIME - Tanggal dan waktu tiket diterbitkan

10. Tabel reviews

Tabel ini digunakan untuk menyimpan rating, ulasan perjalanan, dan hasil analisis sentimen AI dari penumpang.

Nama Kolom Tipe Data Kunci Keterangan
id INT(11) unsigned PK, Auto Increment ID unik data ulasan
booking_id INT(11) unsigned FK (bookings.id) ID transaksi perjalanan terkait
user_id INT(11) unsigned FK (users.id) ID customer pemberi ulasan
rating TINYINT(4) - Skor penilaian (rating 1-5 bintang)
comment TEXT - Isi pesan ulasan tertulis dari customer
sentiment ENUM('positive', 'neutral', 'negative') - Klasifikasi sentimen otomatis berbasis Gemini AI
created_at DATETIME - Tanggal dan waktu ulasan dikirim
updated_at DATETIME - Tanggal dan waktu ulasan diperbarui

11. Tabel chat_logs

Tabel ini menyimpan data log riwayat komunikasi asisten chatbot rekomendasi perjalanan bus berbasis Gemini AI.

Nama Kolom Tipe Data Kunci Keterangan
id INT(11) unsigned PK, Auto Increment ID unik log pesan chat
user_id INT(11) unsigned FK (users.id) ID customer pengirim chat (Null jika guest)
session_id VARCHAR(50) - Sesi identifikasi obrolan chat
message TEXT - Pesan teks pertanyaan dari pengguna
response TEXT - Jawaban teks balasan dari chatbot Gemini AI
created_at DATETIME - Tanggal dan waktu pesan dikirim
updated_at DATETIME - Tanggal dan waktu data log diperbarui