RANCANG BANGUN PERANGKAT LUNAK APLIKASI PELAYANAN KESEHATAN BERBASIS SERVICE-ORIENTED ARCHITECTURE Oleh: Farah Naja (5106100100)
PENDAHULUAN
WHAT IS? Sebuah web pelayanan kesehatan berbasis service-oriented architecture yang bisa mengumpulkan data-data dari semua rumah sakit untuk memudahkan pengguna dalam: melihat rekam medis, mencari dokter, mencari rumah sakit, dan membuat appointment dengan dokter tertentu
TUJUAN
Memudahkan pasien untuk melihat rekam medisnya dari semua rumah sakit yang pernah merawatnya. Memudahkan pasien untuk mencari dokter di kota tempat dia tinggal tanpa perlu mengecek satu per satu ke rumah sakit tertentu. Memudahkan dokter memeriksa rekam medis pasien yang akan diperiksa olehnya karena catatan medis pasien dari berbagai rumah sakit sudah dikumpulkan menjadi satu oleh aplikasi. Memudahkan pasien untuk membandingkan fasilitas rumah sakit yang satu dengan fasilitas rumah sakit yang lain. Memudahkan pasien membuat appointment dengan dokter tertentu.
PERMASALAHAN Permasalahan yang diangakat dalam Tugas Akhir ini adalah: Bagaimana mengambil hanya informasi yang dibutuhkan saja dari database setiap rumah sakit.. Bagaimana agar service pada aplikasi rumah sakit bisa dipakai oleh aplikasi ini.
BATASAN MASALAH
Aplikasi yang dibangun adalah aplikasi pelayanan kesehatan yang memanfaatkan data dari rumah sakit-rumah sakit. Studi kasus yang digunakan adalah Rumah Sakit Metropolitan Medical Center Jakarta dan Rumah Sakit St. Elisabeth Semarang. Rumah Sakit Metropolitan Medical Center Jakarta dan Rumah Sakit St. Elisabeth Semarang yang menyediakan service diasumsikan menggunakan aplikasi rumah sakit yang serupa. Database Rumah Sakit Metropolitan Medical Center Jakarta dan Rumah Sakit St. Elisabeth Semarang diasumsikan memiliki desain dan struktur yang sama, hanya datanya saja yang berbeda. Aplikasi ini dibangun dalam keadaan seolah-olah semua penduduk Indonesia sudah menggunakan Nomor Induk Kependudukan sehingga hanya mempunyai 1 nomor KTP. Data yang digunakan dalam aplikasi ini bukan data asli dari rumah sakit tertentu tapi hanya data yang dibuat mirip dengan aslinya. Tabel pada database rumah sakit hanya dibuat sebagian saja (tabel-tabel yang dibutuhkan oleh aplikasi).
ANALISA
ARSITEKTUR SISTEM DB RS MMC
DB RS SE
App RS Metropolitan Medical Center
App RS St. Elisabeth
Service RS Metropolitan Medical Center
Service RS St. Elisabeth App Layanan Kesehatan
DB App Health Care
Service Kependudukan
DB Kependudukan
App Kependudukan
ARSITEKTUR SOA
PROSES-PROSES UTAMA DI APLIKASI PELAYANAN KESEHATAN Pendaftaran pasien Menampilkan rekam medis Pembuatan appointment Pembatalan appointment Pencarian dokter Pencarian rumah sakit Pencarian penanganan penyakit Manage Profil Manage Penyakit Manage Spesialisasi Manage Obat
USE CASE DIAGRAM uc Use Cases Apl i kasi Pel ayanan Kesehatan
melihat rekam medis «i ncl ude»
registrasi pasien
«i ncl ude» manage profil
membuat appointment manage penyakit
membatalkan appointment Pasien manage spesialisasi mencari dokter Admin
manage obat mencari rumah sakit
mencari penanganan penyakit
PROSES UTAMA DI APLIKASI RUMAH SAKIT
Manage Appointment
uc Use Case Rumah Sakit Aplikasi Rumah Sakit
manage appointment
Dokter
PERANCANGAN
SERVICE DOKTER 1.
2.
3.
Yang bisa dilakukan: Mengambil daftar nama dokter yang ada di rumah sakit. Mengambil data diri dokter yang ada di rumah sakit. Mengambil jadwal praktik seorang dokter yang ada di rumah sakit.
CLASS DIAGRAM class Dokter «properti » Jadw al -
«WebServi ce» DokterRS
akhi r: stri ng awal : stri ng dktr: stri ng hari : stri ng i d: stri ng
«property» + akhi r() : stri ng + awal () : stri ng + dktr() : stri ng + hari () : stri ng + i d() : stri ng
«properti » Dokter -
al amat: stri ng i d: stri ng i drs: stri ng nama: stri ng namars: stri ng spesi al i s: stri ng tel p: stri ng
«property» + al amat() : stri ng + i d() : stri ng + i drs() : stri ng + nama() : stri ng + namars() : stri ng + spesi al i s() : stri ng + spesi al i sasi () : stri ng + tel p() : stri ng
-
i ddokter: stri ng spesi al i sasi : stri ng
+ + +
dataDokter(stri ng) : stri ng j adwal Dokter(stri ng) : stri ng[] namaDokter(stri ng) : stri ng[]
getDokter -
i ddokter: stri ng spesal i sasi : stri ng
+ + + +
cekLogi n(stri ng) : i nt getDetai l Dokter(stri ng) : stri ng getJadwal Dokter(stri ng) : stri ng[] getNamaDokter(stri ng) : stri ng[]
«dataset» Dokter_Spesialisasi -
al amat_dokter: stri ng i d_dokter: stri ng i d_rs: stri ng nama_dokter: stri ng nama_rs: stri ng nama_spesi al i s: stri ng tel p_dokter: stri ng
+ + +
GetData() : voi d[] getDataDokter(stri ng) : voi d[] getDetai l Dokter(stri ng) : voi d[]
«dataset» j adw alPraktik
dataDokter -
i ddokter: stri ng spesi al i sasi : stri ng
+ + +
detai l Dokter(stri ng) : stri ng detai l Jadwal (stri ng) : stri ng[] l i stNamaDokter(stri ng) : stri ng[]
-
akhi r: stri ng awal : stri ng i d_dokter: stri ng i d_hari : stri ng i d_prakti k: stri ng nama_hari : stri ng
+ +
GetData() : voi d[] getJadwal Dokter(stri ng) : voi d[]
SERVICE REKAM MEDIS 1.
Yang bisa dilakukan: Mengambil data rekam medis pasien
CLASS DIAGRAM class Rekam Medis «dataset» rekamMedis -
«properti» RekamMedis
diagnosa: string dosis: string ktp_pasien: string nama_dokter: string nama_obat: string nama_pelayanan: string nama_rs: string tgl_pemeriksaanl: date
dataRekamMedis -
ktp: string
+ rekamMedisPasien(string) : string[]
+ getCatMed(string) : void[] + GetData() : void[]
getRekMedis -
ktp: string
+ getRekamMedis(string) : string[]
«WebService» RekamMedisPasien -
ktp: string
+ dataRekamMedisPasien(string) : string[]
-
diagnosa: string dosis: string ktp: string nama: string obat: string pelayanan: string rs: string tgl: string
«property» + diagnosa() : string + dosis() : string + ktp() : string + nama() : string + obat() : string + pelayanan() : string + rs() : string + tgl() : string
PERANCANGAN ANTAR MUKA Web Pelayanan Kesehatan
Cari Dokter
Penanganan Penyakit
Cari Rumah Sakit Form Login
Detail Dokter
Detail Rumah Sakit
Profil Pasien
Halaman Pasien Rekam Medis
Appointment Halaman Admin
Manage Spesialisasi
Manage Obat
Manage Penyakit
ANTAR MUKA PENANGANAN PENYAKIT ui Form Penanganan Penyakit Penanganan Penyakit
Pilih Penyakit
Penyakit
Pilih
Cancel
Pilih kota
Kota
Pilih
Cancel
Detail Penyakit
Daftar Obat
Daftar dokter
Daftar Rumah Sakit
ANTAR MUKA REKAM MEDIS ui Form Pasien Rekam Medis
Laporan Rekam Medis
IMPLEMENTASI Contoh source code: rekam medis
DATA LAYER using System; using System.Collections.Generic; using System.Text; using System.Data; using Core; using dataLayerRS; using dataLayerRS.rekamMedisTableAdapters; namespace dataLayerRS { public class dataRekamMedis { DataTable dt; RekamMedis rm; public dataRekamMedis() { } public List
rekamMedisPasien(String ktp) { List rekammedis = new List(); REKAM_MEDISTableAdapter rta = new REKAM_MEDISTableAdapter(); dt = rta.getCatMed(ktp); int i = 0; for (i = 0; i < dt.Rows.Count; i++) { rm = new RekamMedis();
rm.IDPemeriksaan = dt.Rows[i]["ID_PEMERIKSAAN"].ToString(); rm.Tanggal = dt.Rows[i]["TGL_PEMERIKSAAN"].ToString(); rm.KTP = dt.Rows[i]["KTP_PASIEN"].ToString(); rm.NamaPasien = dt.Rows[i]["NAMA_PASIEN"].ToString(); rm.TanggalLahir = dt.Rows[i]["TGL_LHR_PASIEN"].ToString(); rm.KTP = dt.Rows[i]["KTP_PASIEN"].ToString(); rm.Nama = dt.Rows[i]["NAMA_DOKTER"].ToString(); rm.RS = dt.Rows[i]["NAMA_RS"].ToString(); rm.Diagnosa = dt.Rows[i]["DIAGNOSA"].ToString(); rm.Fasilitas = dt.Rows[i]["NAMA_PELAYANAN"].ToString(); rm.Detail = dt.Rows[i]["DETAIL"].ToString(); rm.Obat = dt.Rows[i]["NAMA_OBAT"].ToString(); rm.Dosis = dt.Rows[i]["DOSIS"].ToString(); rekammedis.Add(rm); } return rekammedis; } } }
BUSINESS LAYER using System; using System.Collections.Generic; using System.Text; using Core; using dataLayerRS; namespace businessLayerRS { public class getRekMedis { public static getRekMedis instance; public static getRekMedis GetInstance() { if (instance == null) instance = new getRekMedis(); return instance; } public List getRekamMedis(String ktp) { dataRekamMedis dm = new dataRekamMedis(); return dm.rekamMedisPasien(ktp); } } }
SERVICE LAYER using System; using System.Web; using System.Collections; using System.Collections.Generic; using System.Web.Services; using System.Web.Services.Protocols; using businessLayerRS; using Core; [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class RekamMedisPasien : System.Web.Services.WebService { getRekMedis gm; public RekamMedisPasien() { gm = getRekMedis.GetInstance(); } [WebMethod] public List dataRekamMedisPasien(String ktp) { List r = gm.getRekamMedis(ktp); return r; } }
PRESENTATION LAYER using System; using Properti; using System.Data; using System.Configuration; using System.Collections; using System.Collections.Generic; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using CrystalDecisions.CrystalReports.Engine; public partial class rekam_medis : System.Web.UI.Page { RekamMedisRSA.RekamMedisPasien rekRSA = new RekamMedisRSA.RekamMedisPasien(); RekamMedisRSB.RekamMedisPasien rekRSB = new RekamMedisRSB.RekamMedisPasien(); protected void Page_Load(object sender, EventArgs e) { displayData(); } public void displayData() { string ktp = Session["ktp"].ToString(); RekamMedisRSA.RekamMedis[] listrekRSA = rekRSA.dataRekamMedisPasien(ktp); RekamMedisRSB.RekamMedis[] listrekRSB = rekRSB.dataRekamMedisPasien(ktp); List listrekammedis = new List(); RekamMedis r; string nomor, namapas, tgllhr, tgl, nama, rs, diagnosa, pelayanan, detil, obat, dosis, idpem = ""; int panjang1 = listrekRSA.Length; int panjang2 = listrekRSB.Length; for (int i = 0; i < panjang1; i++) { nomor = listrekRSA[i].KTP; namapas = listrekRSA[i].NamaPasien; tgllhr = listrekRSA[i].TanggalLahir; idpem = listrekRSA[i].IDPemeriksaan; tgl = listrekRSA[i].Tanggal; nama = listrekRSA[i].Nama;
rs = listrekRSA[i].RS; diagnosa = listrekRSA[i].Diagnosa; pelayanan = listrekRSA[i].Fasilitas; detil = listrekRSA[i].Detail; obat = listrekRSA[i].Obat; dosis = listrekRSA[i].Dosis; r = new RekamMedis(nomor, namapas, tgllhr, idpem, tgl, nama, rs, diagnosa, pelayanan, detil, obat, dosis); listrekammedis.Add(r); } for (int j = 0; j < panjang2; j++) { nomor = listrekRSB[j].KTP; namapas = listrekRSB[j].NamaPasien; tgllhr = listrekRSB[j].TanggalLahir; idpem = listrekRSB[j].IDPemeriksaan; tgl = listrekRSB[j].Tanggal; nama = listrekRSB[j].Nama; rs = listrekRSB[j].RS; diagnosa = listrekRSB[j].Diagnosa; pelayanan = listrekRSB[j].Fasilitas; detil = listrekRSB[j].Detail; obat = listrekRSB[j].Obat; dosis = listrekRSB[j].Dosis; r = new RekamMedis(nomor, namapas, tgllhr, idpem, tgl, nama, rs, diagnosa, pelayanan, detil, obat, dosis); listrekammedis.Add(r); } CatatanMedis dt = new CatatanMedis(); dt.Clear(); for (int x = 0; x < listrekammedis.Count; x++) { DataRow dr = dt.Tables[0].NewRow(); dr["KTPPasien"] = listrekammedis[x].KTP; dr["NamaPasien"] = listrekammedis[x].NamaPasien; dr["TanggalLahir"] = listrekammedis[x].TanggalLahir; dr["IDPemeriksaan"] = listrekammedis[x].IDPemeriksaan; dr["Tanggal"] = listrekammedis[x].Tanggal; dr["NamaDokter"] = listrekammedis[x].Nama; dr["NamaRS"] = listrekammedis[x].RS; dr["Diagnosa"] = listrekammedis[x].Diagnosa; dr["Fasilitas"] = listrekammedis[x].Fasilitas; dr["Detail"] = listrekammedis[x].Detail; dr["Obat"] = listrekammedis[x].Obat; dr["DosisObat"] = listrekammedis[x].Dosis; dt.Tables[0].Rows.Add(dr); }
ReportDocument rd = new ReportDocument(); rd.Load(Server.MapPath("rekammedis.rpt")); rd.SetDataSource(dt); Viewer.ReportSource = rd; Viewer.DataBind(); } }
UJI COBA
REKAM MEDIS Test ID
TC-UC02-02
Tujuan Test
Melakukan uji coba terhadap proses melihat rekam medis.
Kondisi Awal
Login sukses. Sistem menampilkan halaman pasien.
Data Input
Prosedur pengujian
Hasil yang diharapkan
Hasil yang diperoleh
Kesimpulan
Tidak ada
Pada halaman pasien, pengguna memilih halaman rekam medis.
Sistem menampilkan laporan rekam medis pasien.
Sistem menampilkan laporan rekam medis pasien.
Proses melihat rekam medis berhasil dilakukan.
PENANGANAN PENYAKIT Test ID
TC-UC07-07
Tujuan Test
Melakukan uji coba proses mencari penanganan penyakit
Kondisi Awal
Sistem menampilkan halaman home.
Data Input
Prosedur pengujian
Hasil yang diharapkan
Hasil yang diperoleh
Kesimpulan
penyakit: radang tenggorokan, kota: jakarta
Pengguna memilih menu penanganan penyakit lalu memilih penyakit dan kota yang diinginkan.
Menampilkan detail penyakit, obat yang bisa dipakai, rumah sakit serta dokter yang bisa menangani
Menampilkan detail penyakit, obat yang bisa dipakai, rumah sakit serta dokter yang bisa menangani
Proses pencarian penanganan penyakit berhasil dilakukan
HASIL UJI COBA Proses yang diuji
Hasil
Registrasi pasien
Berhasil
Melihat rekam medis
Berhasil
Membuat appointment
Berhasil
Membatalkan appointment
Berhasil
Mencari dokter
Berhasil
Mencari rumah sakit
Berhasil
Mencari penanganan penyakit
Berhasil
Manage profil
Berhasil
Manage penyakit
Berhasil
Manage Spesialisasi
Berhasil
Manage Obat
Berhasil
Manage appointment
Berhasil
SIMPULAN Aplikasi Pelayanan Kesehatan telah berhasil diimplementasikan dengan menggunakan service-oriented architecture. Aplikasi Pelayanan Kesehatan telah berhasil menggabungkan data-data dari berbagai rumah sakit, seperti: 1. Data rekam medis pasien 2. Data dokter dengan spesialisasi tertentu 3. Data rumah sakit dengan fasilitas tertentu
SARAN Laporan rekam medis bisa dibuat lebih bagus lagi, lengkap dengan dokumen pendukung dari rumah sakit. Keamanan service rumah sakit perlu ditambahkan karena data yang diambil sangat sensitif sehingga nanti hanya aplikasi ini saja yang bisa mengakses service tiap rumah sakit.