Kesehatan

Sistem Rumah Sakit

Pasien, dokter, rekam medis, dan jadwal praktik

Sistem informasi rumah sakit mencakup manajemen pasien, dokter, poli, rekam medis, resep obat, dan jadwal. Skema ini menekankan integritas data medis, audit trail, dan query analitik untuk kebutuhan pelaporan klinis.

Audit Trail Self-join Rekursif View Stored Procedure Partisi Tabel
1

ERD Diagram

Entity Relationship Diagram — notasi Chen (atribut oval)

 PASIEN POLI DOKTER KUNJUNGAN RESEP OBAT berobat menangani bertugas terdiri dari mengobati 1 N N 1 N N 1 1 N N 1 no_rm nama tgl_lahir gol_darah id_poli nama_poli lantai id_dokter spesialisasi no_str id_kunjungan tgl_kunjungan biaya id_obat nama_obat stok Entitas Atribut Relasi Atribut PK (double oval) Garis Relasi

Entitas = persegi panjang · Atribut = oval · Relasi = belah ketupat · Garis ganda = atribut kunci

2

Struktur Tabel

6 tabel dengan kolom, tipe data, dan constraint

pasien 7 kolom
KolomTipe DataConstraintKeterangan
id_pasien INT PK Primary key
no_rm VARCHAR(20) UQ Nomor Rekam Medis
nama VARCHAR(100) Nama lengkap pasien
tgl_lahir DATE Tanggal lahir
jenis_kelamin ENUM(L,P) Jenis kelamin
alamat TEXT Alamat tinggal
gol_darah ENUM(A,B,AB,O) Golongan darah
dokter 5 kolom
KolomTipe DataConstraintKeterangan
id_dokter INT PK Primary key
nama VARCHAR(100) Nama dokter
spesialisasi VARCHAR(80) Bidang spesialisasi
id_poli INT FK → poli.id_poli
no_str VARCHAR(30) UQ Nomor STR dokter
poli 3 kolom
KolomTipe DataConstraintKeterangan
id_poli INT PK Primary key
nama_poli VARCHAR(80) Nama poliklinik
lantai TINYINT Lokasi lantai gedung
kunjungan 7 kolom
KolomTipe DataConstraintKeterangan
id_kunjungan INT PK Primary key
id_pasien INT FK → pasien
id_dokter INT FK → dokter
tgl_kunjungan DATETIME Tanggal & waktu kunjungan
keluhan TEXT Keluhan utama pasien
diagnosis TEXT Diagnosis dokter
biaya DECIMAL(12,2) Biaya konsultasi
resep 5 kolom
KolomTipe DataConstraintKeterangan
id_resep INT PK Primary key
id_kunjungan INT FK → kunjungan
id_obat INT FK → obat
dosis VARCHAR(80) Aturan dosis & waktu minum
jumlah INT Jumlah obat diresepkan
obat 6 kolom
KolomTipe DataConstraintKeterangan
id_obat INT PK Primary key
nama_obat VARCHAR(100) Nama obat
kategori VARCHAR(60) Antibiotik / Analgesik / dll
satuan VARCHAR(20) tablet/ml/kapsul
stok INT Stok gudang farmasi
harga_satuan DECIMAL(10,2) Harga per satuan
3

Contoh Query

4 query analitik siap pakai

1. Rekam medis lengkap seorang pasien
Riwayat kunjungan, dokter, diagnosis, dan biaya.
SELECT k.tgl_kunjungan,
       d.nama         AS dokter,
       d.spesialisasi,
       k.keluhan, k.diagnosis,
       k.biaya
FROM   kunjungan k
JOIN   dokter d ON d.id_dokter = k.id_dokter
WHERE  k.id_pasien = :id_pasien
ORDER  BY k.tgl_kunjungan DESC;
2. Dokter dengan pasien terbanyak bulan ini
Statistik kunjungan per dokter pada bulan berjalan.
SELECT d.nama, d.spesialisasi,
       p.nama_poli,
       COUNT(k.id_kunjungan) AS total_pasien,
       SUM(k.biaya)          AS total_pendapatan
FROM   dokter d
JOIN   poli p      ON p.id_poli    = d.id_poli
JOIN   kunjungan k ON k.id_dokter  = d.id_dokter
WHERE  MONTH(k.tgl_kunjungan) = MONTH(CURDATE())
  AND  YEAR(k.tgl_kunjungan)  = YEAR(CURDATE())
GROUP  BY d.id_dokter
ORDER  BY total_pasien DESC;
3. Obat paling sering diresepkan
Analisis penggunaan obat untuk stok farmasi.
SELECT o.nama_obat, o.kategori, o.satuan,
       COUNT(r.id_resep)  AS jml_resep,
       SUM(r.jumlah)      AS total_digunakan
FROM   obat o
JOIN   resep r ON r.id_obat = o.id_obat
GROUP  BY o.id_obat
ORDER  BY total_digunakan DESC
LIMIT  10;
4. Biaya total perawatan per pasien
Hitung total biaya kunjungan + obat per pasien.
SELECT ps.no_rm, ps.nama,
       COUNT(k.id_kunjungan)                   AS total_kunjungan,
       SUM(k.biaya)                             AS biaya_konsultasi,
       COALESCE(SUM(r.jumlah * o.harga_satuan), 0) AS biaya_obat,
       SUM(k.biaya) +
       COALESCE(SUM(r.jumlah * o.harga_satuan), 0) AS total_biaya
FROM   pasien ps
JOIN   kunjungan k ON k.id_pasien    = ps.id_pasien
LEFT JOIN resep r  ON r.id_kunjungan = k.id_kunjungan
LEFT JOIN obat  o  ON o.id_obat      = r.id_obat
GROUP  BY ps.id_pasien
ORDER  BY total_biaya DESC;