BERITA PROGRAMMING Cara Bridging SIMRS Dengan Eclaim

Cara Bridging SIMRS Dengan Eclaim

Oleh Aryan Herdianndoro | Selasa, 02 Maret 2021

Cara Bridging SIMRS Dengan Eclaim

Tutorial cara bridging claim inacbg bpjs menggunakan php

Yuk, ikuti program inovatif MAGANG ONLINE untuk berbagai bidang seperti animasi, coding, 3D, illustrasi, musik dan bisnis hanya di GAMELAB.ID!

Ciptakan lingkungan belajar yang lebih MENYENANGKAN dengan GAME-BASED LEARNING!

Daftar Isi Artikel

Baca Juga : Perbedaan Web Application dan Website, Emang Beda?

Apa itu eclaim?

Eclaim merupakan sebuah aplikasi yang dikeluarkan oleh kementrian kesehatan yang berguna rumah sakit untuk mengajukan claim pasien ke bpjs. Aplikasi ini menghasilkan kode bedasarkan diagnosa penyakit dan tindakan yang diberikan kepada pasien. Guna meningkatkan efektivitas pelayanan claim pasien, INACBG juga menyediakan fasilitas bridging data. Bridging data data INACBG ini tidak begitu rumit, hal pertama yang harus dilakukan yaitu men-generate enkripsi key yang terdapat didalam aplikasi

//mssql server connection

$serverName = "192.000.0.0\DEV";

$database = " ";

$uid = ' ';

$pwd = ' ';

$connectionInfo = array("UID" => $uid, "PWD" => $pwd, "Database" => $database);

$conn = sqlsrv_connect($serverName, $connectionInfo);  


Setelah berhasil men-generate enkripsi key anda dapat langsung membuat source code untuk melakukan koneksi dengan INACBG. Koneksi dengan INACBG menggunakan consid, secretkey yang diberikan khusus dari bpjs dan link server aplikasi INACBG. Tidak lupa saya juga membuat koneksi dengan database aplikasi SIMRS.

Dari SIMRS saya akan mengirimkan data ke  webservice INACBG saya akan menggunakan method POST untuk mengirim data claim pasien, untuk mengirim data claim  webservice INACBG hanya memberikan bridging dengan service POST SEP pasien . Maka dari itu  hal pertama saya harus membuat query untuk mendapatkan data pasien berupa nomor sep, nomor bpjs, tgl_masuk, tgl_pulang, jenis_rawat, kelas_rawat, indicator icu, lama rawat icu, jam pemakaian ventilator, indicator naik kelas/tidak, tarif rumah sakit yang meliputi prosedur non bedah, prosedur bedah, konsultasi, tenaga ahli, keperawatan, penunjnag, radiologi, laboratorium, pelayanan_darah, rehabilitasi, kamar, rawat_intensif, obat, obat kronis, obat kemo, alkes, bmhp, sewa alat, tarif poli eksekutif, nama dokter dpjp, id penjamin, nama penjamin.

$ws=sqlsrv_query($conn,"SELECT   BillingPenjaminHeader.NoBilling, PersonsInPartners.MedicalRecordNumber, Pasien.Nama, Pasien.DateofBirth, Pasien.Gender, BillingPenjaminHeader.NoMember1 AS NoBPJS, BillingPenjaminHeader.NoSEP, BillingPenjaminHeader.TanggalMasuk, BillingPenjaminHeader.TanggalKeluar, BillingPenjaminHeader.TipePerawatanKey, dbo.PersonsInInsurance.KelasBPJS, CASE WHEN SisPilihan.Nama = 'Dipulangkan' THEN '1' WHEN SisPilihan.Nama = 'Dirawat inap' THEN '2' WHEN SisPilihan.Nama = 'Dirujuk ke rawat jalan tingkat lanjut' THEN '2' WHEN SisPilihan.Nama= 'Dirujuk ke RS lain' THEN '2' WHEN SisPilihan.Nama = 'Pulang atas permintaan sendiri' THEN '3' WHEN SisPilihan.Nama = 'Datang sudah meninggal' THEN '4' WHEN SisPilihan.Nama = 'Lain-lain' THEN '5' WHEN SisPilihan.Nama = 'Meninggal' THEN '4' ELSE '0' END AS CaraPulang, Dokter.Nama AS Dokter, SUM(CASE WHEN dbo.ItemMaster.NamaItem LIKE '%ICU' AND dbo.ItemMaster.KodeItem LIKE 'C%' THEN dbo.BillingPenjaminDetail.Jumlah ELSE 0 END) AS ICU, SUM(CASE WHEN dbo.ItemMaster.NamaItem LIKE 'VENTILATOR%' THEN dbo.BillingPenjaminDetail.Jumlah ELSE 0 END) AS VENTILATOR

FROM         dbo.Person AS Dokter RIGHT OUTER JOIN dbo.BillingPenjaminDetail LEFT OUTER JOIN dbo.ItemMaster ON dbo.BillingPenjaminDetail.KodeItem = dbo.ItemMaster.KodeItem RIGHT OUTER JOIN dbo.BillingPenjaminHeader AS BillingPenjaminHeader INNER JOIN dbo.BillingPenjaminSubHeader ON BillingPenjaminHeader.NoBilling = dbo.BillingPenjaminSubHeader.NoBilling LEFT OUTER JOIN dbo.PersonsInPartners AS PersonsInPartners INNER JOIN dbo.Person AS Pasien ON PersonsInPartners.PersonKey = Pasien.PersonKey INNER JOIN dbo.PersonsInInsurance ON Pasien.PersonKey = dbo.PersonsInInsurance.PersonKey ON BillingPenjaminHeader.PersonKeyPatient = Pasien.PersonKey ON  dbo.BillingPenjaminDetail.NoReferensi = dbo.BillingPenjaminSubHeader.NoReferensi ON Dokter.PersonKey = BillingPenjaminHeader.DokterKey LEFT OUTER JOIN dbo.SisPilihan AS SisPilihan ON BillingPenjaminHeader.IdAlasanKeluar = SisPilihan.rNo

GROUP BY BillingPenjaminHeader.NoBilling, PersonsInPartners.MedicalRecordNumber, Pasien.Nama, Pasien.DateofBirth, Pasien.Gender, BillingPenjaminHeader.NoMember1,  BillingPenjaminHeader.NoSEP, BillingPenjaminHeader.TanggalMasuk, BillingPenjaminHeader.TanggalKeluar, BillingPenjaminHeader.TipePerawatanKey, BillingPenjaminHeader.KelasHarga, SisPilihan.Nama, BillingPenjaminHeader.PartnerKeyInsurance, Dokter.Nama, dbo.PersonsInInsurance.KelasBPJS,BillingPenjaminHeader.TotalTagihan

HAVING     (BillingPenjaminHeader.PartnerKeyInsurance = 244) AND (BillingPenjaminHeader.TanggalMasuk >= CONVERT(varchar, getdate(), 102))   AND  (BillingPenjaminHeader.TotalTagihan > 0) ORDER By BillingPenjaminHeader.NoSEP ASC");

Query untuk mendapat data pasien berupa nomor_sep, nomor bpjs, tgl masuk, tgl keluar, tipe perawatan, kelas bpjs, indicator icu, lama pemakaian ventilator, dokter dpjp, nama pasien, tanggal lahir, cara pulang saya menggunakan query sebagai berikut:

if(is_null($data['TanggalKeluar'])){

                 $tgl_keluar  =$data['TanggalMasuk']->format('Y-m-d H:i:s');

                    }else{

                    $tgl_keluar = $data['TanggalKeluar']->format('Y-m-d H:i:s');

                    }



                    if(is_null($data['DateofBirth'])){

                    $tgl_lahir  = ".date('Y-m-d H:i:s').";

                    }else{

                      $tgl_lahir = $data['DateofBirth']->format('Y-m-d H:i:s');

                    }


Untuk pasien rawat jalan, tanggal keluar tidak terisi di dalam database maka dibuat source code untuk mengirim tanggal keluar agar tidak kosong. Berikut source code untuk tanggal keluar.

if($gender == "L"){

  $Jenkel='1';

}else{

  $Jenkel='2';

}

 Begitu juga dengan jenis kelamin, karena di simr jenis kelamin berisi L atau P tapi di webservice jenis kelamin berisi 1 atau 2. Maka, membuat mapping jenis kelamin, berikut source codenya. :

//mssql query pnb

$tsql = "SELECT     SUM(BillingPenjaminDetail.Harga) AS pnb

FROM   dbo.BillingPenjaminHeader AS BillingPenjaminHeader INNER JOIN  dbo.BillingPenjaminSubHeader AS BillingPenjaminSubHeader ON BillingPenjaminHeader.NoBilling = BillingPenjaminSubHeader.NoBilling INNER JOIN dbo.BillingPenjaminDetail AS BillingPenjaminDetail ON BillingPenjaminSubHeader.NoReferensi = BillingPenjaminDetail.NoReferensi INNER JOIN dbo.ItemMaster AS ItemMaster ON BillingPenjaminDetail.KodeItem = ItemMaster.KodeItem

WHERE     (BillingPenjaminHeader.NoSEP = '$nosep') AND (ItemMaster.NamaItem NOT LIKE '%KONSUL%' AND  ItemMaster.NamaItem NOT LIKE '%VISITE%' AND ItemMaster.NamaItem NOT LIKE '%PENGAWAS%') AND (ItemMaster.KodeItem LIKE 'D%' OR ItemMaster.KodeItem LIKE 'I%' OR ItemMaster.KodeItem LIKE 'K%' OR ItemMaster.KodeItem LIKE 'U%') ";

$stmt = sqlsrv_query($conn, $tsql);

$pnb = sqlsrv_fetch_array($stmt);

$procedure_non_bedah=$pnb["pnb"];

                      Untuk tarif rumah sakit, juga di buat mappingan tagihan karena data yang ada di dalam database SIMRS ada beberapa perbedaan. Berikut beberapa contoh mappingan data tagihan rumah sakit yang akan di post ke webservice INACBG
a. Mapping data prosedur non bedah


b. Mapping data obat

//mssql query obat

$tsql = "SELECT     SUM(BillingPenjaminDetail.totalhargadijamin) AS obat

FROM     dbo.BillingPenjaminHeader AS BillingPenjaminHeader INNER JOIN dbo.BillingPenjaminSubHeader AS BillingPenjaminSubHeader ON BillingPenjaminHeader.NoBilling = BillingPenjaminSubHeader.NoBilling INNER JOIN dbo.BillingPenjaminDetail AS BillingPenjaminDetail ON BillingPenjaminSubHeader.NoReferensi = BillingPenjaminDetail.NoReferensi INNER JOIN dbo.ItemMaster AS ItemMaster ON BillingPenjaminDetail.KodeItem = ItemMaster.KodeItem

WHERE      (BillingPenjaminHeader.NoSEP = '$nosep') AND (ItemMaster.KodeItem LIKE 'F0101%' OR

                      ItemMaster.KodeItem LIKE 'F0102%' OR

                      ItemMaster.KodeItem LIKE 'F0104%' OR

                      ItemMaster.KodeItem LIKE 'F0199%' OR

                      ItemMaster.KodeItem LIKE 'F02%' OR

                      ItemMaster.KodeItem LIKE 'Q%') AND (ItemMaster.KodeItem NOT IN ('F01010088', 'F01010089', 'F01010090', 'F01010240', 'F01010281', 'F01010283', 'F01010289', 'F01010398', 'F01010401', 

                      'F01010402', 'F01020216', 'F01020599','F01030081', 'F01020600', 'F01020601', 'F01020621', 'F01020622', 'F01020695', 'F01020696', 'F01020697', 'F01021829', 'F01021866',  'F01021946', 

                  'F01021947', 'F01021948', 'F01022010', 'F01022140','F01020232' , 'F01021177' , 'F01021947' , 'F0103%' , 'F03010005' , 'F03010535' , 'F03010606'))";

$stmt = sqlsrv_query($conn, $tsql);

$obt = sqlsrv_fetch_array($stmt);

$obat=$obt["obat"];

               Jika seluruh query data telah dibuat, maka saya lanjut ke modul webservice INACBG, saya mulai dengan registrasi data pasien yang belum terdaftar dalam aplikasi inacbg

//registrasi pasien jika belum terdaftar 

$json_request = <<<EOT

{

"metadata": {

"method": "new_claim"

},

"data": {

"nomor_kartu": "$nobpjs",

"nomor_sep":"$nosep",

"nomor_rm":"$norm",

"nama_pasien":"$nama_pasien",

"tgl_lahir":"$tgl_lahir",

"gender":"$Jenkel"

}

}

EOT;

// membuat json juga dapat menggunakan json_encode:

$ws_query["metadata"]["method"] = "new_claim";

$ws_query["data"]["nomor_kartu"] = "$nobpjs";

$ws_query["data"]["nomor_sep"] = "$nosep";

$ws_query["data"]["nomor_rm"] = "$norm";

$ws_query["data"]["nama_pasien"] = "$nama_pasien";

$ws_query["data"]["tgl_lahir"] = "$tgl_lahir";

$ws_query["data"]["gender"] = "$Jenkel";

$json_request = json_encode($ws_query);



// data yang akan dikirimkan dengan method POST adalah encrypted:

$payload = inacbg_encrypt($json_request,$key);

// tentukan Content-Type pada http header

$header = array("Content-Type: application/x-www-form-urlencoded");

// url server aplikasi E-Klaim,

$url = "http://192.000.0.00/E-Klaim/ws.php?/new_claim";

// setup curl

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url); 

curl_setopt($ch, CURLOPT_HTTPHEADER,$header); 

curl_setopt($ch, CURLOPT_TIMEOUT, 3);  

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

curl_setopt($ch, CURLOPT_POST, 1); 

curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);



$response = curl_exec($ch);



// terlebih dahulu hilangkan "----BEGIN ENCRYPTED DATA----\r\n"

// dan hilangkan "----END ENCRYPTED DATA----\r\n" dari response

$first  = strpos($response, "\n")+1;

$last = strrpos($response, "\n")-1;

$response = substr($response, $first,strlen($response) - $first - $last);



$first,

strlen($response) - $first - $last);



// decrypt dengan fungsi inacbg_decrypt

$response = inacbg_decrypt($response,$key);

// hasil decrypt adalah format json, ditranslate kedalam array

$msg = json_decode($response,true);



        //print_r($err);    

       print_r($response);



    // close cURL resource, and free up system resources

        curl_close($ch); 



// decrypt dengan fungsi inacbg_decrypt

$response = inacbg_decrypt($response,$key);

// hasil decrypt adalah format json, ditranslate kedalam array

$msg = json_decode($response,true);



        //print_r($err);    

       print_r($response);



    // close cURL resource, and free up system resources

        curl_close($ch); 

 //json query

      $json_request = <<<EOT

        {

        "metadata": {

        "method": "set_claim_data",

        "nomor_sep":"$nosep"

        },

          "data": {

          "nomor_sep":"$nosep",

          "nomor_kartu": "$nobpjs",

          "tgl_masuk":"$tgl_masuk",

          "tgl_pulang":"$tgl_keluar",

          "jenis_rawat":"$jenisRawat",

          "kelas_rawat":"$kelas_perawatan",

          "icu_los":"$indikator_icu",

          "ventilator_hour":"$jam_ventilator",

            "tarif_rs":{

              "prosedur_non_bedah":"$procedure_non_bedah",

              "prosedur_bedah":"$procedure_bedah",

              "konsultasi":"$konsultasi",

              "tenaga_ahli":"0",

              "keperawatan":"$keperawatan",

              "penunjang":"$penunjang",

              "radiologi":"$radiologi",

              "laboratorium":"$laboratorium",

              "pelayanan_darah":"$pelayanan_darah",

              "rehabilitasi":"$rehabilitasi",

              "kamar":"$kamar",

              "rawat_intensif":"$rawat_intensif",

              "obat":"$obat",

              "obat_kronis":"$obat_kronis",

              "obat_kemoterapi":"$obat_kemotherapi",

              "alkes":"$alkes",

              "bmhp":"$bmhp",

              "sewa_alat":"$sewa_alat" },
 
                       Jika di sudah dilanjutkan dengan post data nomor sep pasien untuk memasukkan claim ke aplikasi INACBG.

          "nama_dokter":"$dokter_dpjp",

          "kode_tarif":"CS",

          "payor_id":"3",

          "payor_cd":"JKN",

          "coder_nik":"xxxxxxx"

          }

        }

        EOT;

// data yang akan dikirimkan dengan method POST adalah encrypted:

$payload = inacbg_encrypt($json_request,$key);



// tentukan Content-Type pada http header

$header = array("Content-Type: application/x-www-form-urlencoded");



// url server aplikasi E-Klaim,

// silakan disesuaikan instalasi masing-masing

$url = "http://192.000.0.00/E-Klaim/ws.php?/set_claim_data";



// setup curl

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url); 

curl_setopt($ch, CURLOPT_HTTPHEADER,$header); 

curl_setopt($ch, CURLOPT_TIMEOUT, 3);  

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

curl_setopt($ch, CURLOPT_POST, 1); 

curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);



$response = curl_exec($ch);

// terlebih dahulu hilangkan "----BEGIN ENCRYPTED DATA----\r\n"

// dan hilangkan "----END ENCRYPTED DATA----\r\n" dari response

$first  = strpos($response, "\n")+1;

$last = strrpos($response, "\n")-1;

$response = substr($response,

$first,

strlen($response) - $first - $last);



// decrypt dengan fungsi inacbg_decrypt

$response = inacbg_decrypt($response,$key);

// hasil decrypt adalah format json, ditranslate kedalam array

$msg = json_decode($response,true);



        //print_r($err);    

       print_r($response);

    // close cURL resource, and free up system resources

        curl_close($ch); 


Berikut contoh respon json data yang berhasil terkirim dilihat menggunakan aplikasi json viewer (http://jsonviewer.stack.hu/)

{"metadata":{"code":200,"message":"Ok"},"response":{"patient_id":"xxx","admission_id":xx,"hospital_admission_id":xxx\}\}" }}

respons json

                      


Aryan Herdianndoro

Aryan Herdianndoro

Selasa, 02 Maret 2021

ARTIKEL TERKAIT

Magang lebih mudah dan bisa dilakukan dari mana saja dengan Program Magang Online Gamelab. Magang Bersertifikat, plus Pelatihan!

DAFTAR MAGANG

ARTIKEL POPULER

KATEGORI