Bedah Kasus: Perjalanan RS Rujukan Bangun Sistem Antrian Online Mandiri

Bedah Kasus: Perjalanan RS Rujukan Bangun Sistem Antrian Online Mandiri

Sobat IT RS, siapa yang nggak pernah dapat komplain: “Pak, antrian farmasi lama banget, pasien ngamuk, perawat ngeluh, keluarga pasien ngegas WA ke dokter jaga”? Masalah klasik, bikin darah tinggi. Kalau rumah sakit Sobat IT RS masih pakai kertas, atau antrian dadakan “pakai kursi” atau “pakai suara”, siap-siap jadi sasaran empuk. Kali ini, kita bedah habis pengalaman salah satu anggota PETIRS, sebut saja RS Harapan Sentosa, rumah sakit rujukan kelas B, yang sukses memangkas waktu tunggu farmasi hampir 60% dengan sistem antrian online bikinan sendiri, tanpa vendor mahal, tanpa install aplikasi ribet.

Kisah ini bukan sekadar teori manis atau demo vendor di hotel. Ini cerita lapangan: mulai dari ribetnya koordinasi, napas pendek karena server sempat jebol, sampai akhirnya workflow farmasi jadi jauh lebih enteng. Kita kulik bareng prosesnya, jatuh bangunnya, dan yang paling penting — contoh teknis langsung, mulai dari desain tabel, logic antrian, sampai skrip monitoring. Simak terus, siapa tahu bisa jadi inspirasi gebrakan di RS Sobat!

Latar Belakang: Antrian Farmasi, Sumber Sakit Kepala

Masalah Lapangan

  • Waktu tunggu obat rawat jalan kadang tembus 2-3 jam, apalagi pas peak BPJS.
  • Petugas farmasi bingung urutan resep, sering ketuker antara pasien lama, baru, prioritas lansia, atau pasien khusus.
  • Pasien harus bolak-balik cek: “Sudah jadi belum, Bu?” — wasting waktu, energi, bikin kerumunan.
  • Komplain masuk ke IT: “Bisa nggak ini dibikin online kayak bank?”

Kondisi Awal

  • Sistem SIMRS sudah terintegrasi, tapi modul antrian farmasi belum ada.
  • Petugas farmasi cetak resep manual, tumpuk map di meja, kadang pakai sticky note untuk prioritas.
  • IT RS: Staf 5 orang, 1 programmer, 1 admin DB, 2 teknisi, 1 kepala instalasi merangkap semua.

Langkah Awal: Analisa Kebutuhan Sederhana

Brainstorming Tim Mini

  • Ngumpul bareng farmasi, perawat, 2 orang IT, kepala instalasi.
  • List kebutuhan real:
    • Antrian harus otomatis update setiap resep masuk.
    • Petugas bisa lihat urutan & status tiap resep.
    • Pasien, keluarga, atau perawat bisa cek status dari HP tanpa login ribet.
    • Harus minimal maintenance. Gagal sehari, chaos.

MVP: Yang Penting Jalan Dulu

  • Frontend: Web view sederhana, bisa dibuka HP, tanpa install.
  • Backend: Ambil data resep baru dari SIMRS, kelola status, push update ke frontend via polling AJAX (belum websocket, biar simpel).
  • Tombol update status di farmasi: “Diproses”, “Sedang Racik”, “Siap Ambil”, “Diambil”.
  • QR code di kertas resep supaya pasien gampang scan & pantau.

Desain Database: Struktur Minimalis, Efektif

Tabel Inti: antrian_farmasi


CREATE TABLE antrian_farmasi (
    id SERIAL PRIMARY KEY,
    id_resep VARCHAR(50) NOT NULL,
    no_rm VARCHAR(20) NOT NULL,
    nama_pasien VARCHAR(100) NOT NULL,
    waktu_masuk TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    status VARCHAR(20) NOT NULL DEFAULT 'masuk', -- masuk/racik/siap/diambil/batal
    prioritas INT DEFAULT 0, -- 0 biasa, 1 prioritas (lansia, anak, emergency)
    last_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
  • id_resep: Diambil dari transaksi resep di SIMRS.
  • no_rm, nama_pasien: Display di layar petugas & hasil query pasien.
  • waktu_masuk: Urutkan antrian real time.
  • status: Core workflow. Update tiap step.
  • prioritas: Bisa sorting, untuk pasien “cepat” (anak, lansia, VIP).

Ponitail: Belum ada audit trail, tambah tabel log kalau butuh histori lengkap. Sekarang, fokus antrian real-time saja.

Integrasi SIMRS: Automasi Tarik Data Resep Baru

Skema Integrasi

  • SIMRS generate resep dengan status “siap racik”.
  • Trigger otomatis ke sistem antrian farmasi (pakai REST API sederhana dari SIMRS ke endpoint backend antrian farmasi, payload JSON).
  • Jika SIMRS belum support API, fallback: polling ke tabel resep tiap 30 detik, ambil resep baru yang belum masuk ke antrian_farmasi.

Contoh Endpoint API: Tambah Antrian Baru


POST /api/antrian_farmasi/masuk
Content-Type: application/json

{
  "id_resep": "RX2024060101",
  "no_rm": "18031420",
  "nama_pasien": "Siti Nurjanah",
  "prioritas": 1
}
  • Jika sukses, backend insert ke tabel antrian_farmasi status 'masuk'.
  • Jika ada duplicate id_resep, abaikan. Resep sama nggak boleh dobel.

Snippet Insert (PostgreSQL + Node.js Express)


// pseudo code, Express handler
app.post('/api/antrian_farmasi/masuk', async (req, res) => {
  const {id_resep, no_rm, nama_pasien, prioritas} = req.body;
  try {
    await db.query(
      `INSERT INTO antrian_farmasi 
      (id_resep, no_rm, nama_pasien, prioritas) 
      VALUES ($1, $2, $3, $4)
      ON CONFLICT(id_resep) DO NOTHING`,
      [id_resep, no_rm, nama_pasien, prioritas || 0]
    );
    res.status(201).json({status: 'ok'});
  } catch (e) {
    res.status(500).json({error: e.message});
  }
});

Workflow Petugas Farmasi: Update Status Sekali Klik

UI Minimalis di PC Farmasi

  • Tabel antrian real-time: Kolom No, Nama, Status, Waktu Masuk, Prioritas, Aksi.
  • Tombol sekali klik: “Racik”, “Siap”, “Diambil”.
  • Otomatis refresh tiap 10 detik (pakai JS polling fetch, render ulang tabel).

Snippet Update Status


// PATCH /api/antrian_farmasi/:id_resep/status
app.patch('/api/antrian_farmasi/:id_resep/status', async (req, res) => {
  const {status} = req.body;
  const {id_resep} = req.params;
  try {
    await db.query(
      `UPDATE antrian_farmasi 
      SET status=$1, last_update=NOW() 
      WHERE id_resep=$2`,
      [status, id_resep]
    );
    res.json({status: 'ok'});
  } catch (e) {
    res.status(500).json({error: e.message});
  }
});

Petugas farmasi tinggal klik status, langsung update ke backend. Status pasien berubah juga di frontend pasien.

Frontend Pasien: Cek Status Antrian dari HP

QR Code + Web View

  • Setiap resep print QR code, link ke viewer antrian farmasi per pasien.
  • Pasien scan QR, langsung dapat status:
    • No. RM
    • Nama
    • Status: [Diproses/Racik/Siap Ambil/Diambil]
    • Estimasi tunggu (hitung dari posisi antrian/pasien sebelum dia)
  • Tidak perlu login, tidak simpan data sensitif — cukup read-only.

Contoh Query Estimasi Posisi Antrian (PostgreSQL)


SELECT COUNT(*) + 1 AS posisi 
FROM antrian_farmasi
WHERE status IN ('masuk', 'racik', 'siap')
AND waktu_masuk < 
    (SELECT waktu_masuk FROM antrian_farmasi WHERE id_resep = $1)
ORDER BY waktu_masuk;

Estimasi waktu: posisi x rata-rata proses (misal 3 menit per pasien, bisa diambil dari log waktu mundur 1 minggu).

Monitoring & Troubleshooting: Hindari Downtime Dadakan

Tools Dipakai

  • Script cron: Cek jumlah antrian, bandingkan dengan log jumlah resep baru.
  • Alert via Telegram bot: Kalau antrian baru tidak bertambah dalam 10 menit, bot notif ke grup IT.
  • Query slow? Simpel: EXPLAIN ANALYZE di PostgreSQL, pastikan ada index waktu_masuk, id_resep.
  • Log error ke file, bukan cuma console.

Contoh Script Cek Konsistensi (Bash + psql)


#!/bin/bash
# cek_antrian.sh

JML_ANTRIAN=$(psql -U simrs -d dbsimrs -t -c "SELECT count(*) FROM antrian_farmasi WHERE status IN ('masuk','racik','siap')")
JML_RESEP=$(psql -U simrs -d dbsimrs -t -c "SELECT count(*) FROM resep WHERE tanggal=NOW()::date")
if [ $((JML_RESEP - JML_ANTRIAN)) -gt 3 ]; then
  curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" \
    -d chat_id="$CHAT_ID" \
    -d text="Warning: Ada resep baru belum masuk antrian farmasi!"
fi

Hasil di Lapangan: Waktu Tunggu Anjlok, Komplain Surut

Sebelum Sistem

  • Waktu tunggu farmasi rata-rata 2 jam (data sampling, dari print jam resep sampai obat ready).
  • Komplain dari pasien/keluarga minimal 4-5 kali sehari, puncak jam 11-13.
  • Farmasi sering salah urut, miss pasien prioritas.

Setelah Sistem Jalan 1 Bulan

  • Waktu tunggu turun rata-rata jadi 45 menit (sampling di hari dan jam sama).
  • Komplain turun drastis, rata-rata 1x per hari, itu pun mostly bukan soal antrian (lebih sering soal perubahan resep dokter mendadak).
  • Farmasi lebih santai, urut pasien & prioritas jelas, minimal map nyasar/hilang.
  • Pasien lebih paham posisi, nggak nanya-nanya terus.

Catatan: Kunci Sukses Bukan Sekadar Teknologi

  • Workflow farmasi tetap harus disiplin update status — tanpa itu, sistem online percuma.
  • Support tim IT wajib standby minimal 1 bulan awal implementasi, siap bantu training & troubleshooting.
  • Komunikasi ke pasien & keluarga: QR code ditempel besar-besar, petugas edukasi saat serah resep.

Pitfall & Saran Buat Sobat IT RS yang Mau Coba

Masalah Umum yang Muncul

  • Resep manual/luar sistem: Ada dokter yang masih “nakal” print resep sendiri, nggak masuk antrian otomatis. Solusi: Wajibkan semua via SIMRS, atau tambahkan input manual rapid entry di farmasi.
  • Pasien gaptek: Ada yang nggak bisa scan QR/akses web. Solusi: Sediakan monitor LCD di farmasi, display antrian publik, plus tetap ada support pertanyaan manual.
  • Server down: Pastikan backup DB, auto restart service. Pakai VPS lokal saja cukup, jangan terlalu ribet cloud kecuali sudah siap SDM-nya.
  • Antrian nyangkut/gagal update: Logging wajib aktif, auto resend status dari SIMRS kalau error.
  • Privasi pasien: Minimalisasi data yang tampil di web viewer, cukup nama depan/initial, nomor antrian, status.

Tips Hemat Waktu & Biaya

  • Jangan langsung mikir websocket atau push notif ke HP pasien — polling AJAX tiap 15 detik sudah cukup, lebih stabil, nggak ribet firewall atau NAT.
  • Frontend bisa pakai plain HTML + JS vanilla, nggak harus SPA/vue/react. Biar gampang deploy, maintan, dan di-debug staf non-programmer.
  • Security: Semua endpoint API backend validasi input, log IP, rate limit sederhana pakai middleware. Jangan sampai endpoint bisa di-spam.

Penutup: Inspirasi Buat Sobat IT RS di Seluruh Indonesia

Sobat IT RS, cerita RS Harapan Sentosa membuktikan: solusi antrian farmasi online bisa dibangun sendiri, tanpa harus keluar duit ratusan juta ke vendor, tanpa ribet install aplikasi di HP pasien. Kuncinya: pahami proses di lapangan, bikin sistem yang workable buat user, dan siap support di masa-masa transisi.

Kapan lagi bisa kasih dampak langsung buat ribuan pasien dan tenaga medis di RS, modal skill IT dan sedikit “ngoprek” backend SIMRS? Kalau Sobat IT RS mau contoh script, struktur DB, atau template UI dari studi kasus ini, japri ke komunitas PETIRS — sharing is caring! Sampai jumpa di bedah kasus berikutnya!