Lewati ke konten utama

Alur Antrian Pasien

Sistem antrian tiga layar: kios (ambil nomor) → loket (panggil) → papan tayang (tampilkan).


Arsitektur


Tahap 1 — Kios ambil nomor

Aturan penomoran

AturanNilai
Dihitung perpoliklinik dan tanggal
ResetSetiap ganti hari, kembali ke 1
Format tampilan3 digit dengan nol di depan (007)
Status awalWaiting
appointment_idnull — antrian walk-in tidak terkait janji temu
Anti-tabrakan

lockForUpdate() di dalam transaksi mengunci baris antrian terakhir saat menghitung nomor berikutnya. Dua pengunjung yang menekan tombol bersamaan mustahil mendapat nomor yang sama.

Validasi

'poly_id' => ['required', 'integer', 'exists:pgsql_crm.polyclinics,poly_id'],
'doctor_id' => ['required', 'integer', 'exists:pgsql_crm.doctors,doctor_id'],

Nama field di pesan error ditampilkan sebagai "Poli" dan "Dokter".


Tahap 2 — Meja loket

Halaman /admin/queue-board (judul "Antrian Loket").

Logika callNext()

Panggilan lintas-poli

callNext() mengambil nomor Waiting terkecil hari itu tanpa menyaring poliklinik. Artinya satu loket bisa memanggil nomor dari poli mana pun. Penomorannya sendiri per-poli, jadi pastikan pembagian loket per poli diatur secara prosedural di lapangan.

Tindakan lain

TindakanEfek
addCounter(nama)Buat QueueCounter baru, is_active = true. Nama kosong diabaikan
toggleCounter(id)Balik is_active. Loket nonaktif tidak bisa memanggil
completeCurrent(id)Antrian aktif → Done + done_at, lalu current_queue_id dikosongkan

Daftar antrian menunggu di halaman ini menampilkan maksimal 30 nomor, diurutkan dari nomor terkecil, lengkap dengan relasi poliklinik & dokter.

queueDate default hari ini dan bisa diubah untuk melihat tanggal lain.


Tahap 3 — Papan tayang

Halaman layar penuh /dashboard-antrian.

Konversi URL YouTube

Bentuk masukanDiubah menjadi
https://youtu.be/ABC123https://youtube.com/embed/ABC123?autoplay=1&mute=1&loop=1&playlist=ABC123
https://youtube.com/watch?v=ABC123sama seperti di atas
bentuk lain / kosongnull — video tidak ditampilkan (bukan error)

Parameter mute=1 wajib supaya browser mengizinkan autoplay.


Model data


MenuKegunaan
Antrian Loket (/admin/queue-board)Operasional loket
Dashboard Antrian (/admin/queue-dashboard)Pintasan; dialihkan ke /dashboard-antrian
Antrian RS (/admin/hospital-queues)Resource Filament untuk melihat/mengelola baris antrian secara langsung
PengaturanGambar latar, URL YouTube, teks berjalan

Catatan operasional

HalPerilaku
Nomor tidak dipanggil sampai tutupTetap Waiting. Hari berikutnya penomoran mulai dari 1 lagi, tapi baris lama tetap ada dengan queue_date kemarin
Loket dinonaktifkan saat memegang antrianAntrian tetap Called dan current_queue_id tetap terisi — selesaikan dulu sebelum menonaktifkan
Status In-Service dan SkippedAda di CHECK constraint database, tapi tidak dipakai alur QueueBoardPage saat ini. Bisa diisi lewat resource Antrian RS
Papan tayang tidak menampilkan apa-apaTidak ada loket aktif yang memegang antrian