Download SIMRS GOS Gratis

Syarat Mendapatkan SIMRS GOS:

  • RS sudah mempunyai infrastruktur IT (Jaringan, Komputer dan Server)
  • RS Mempunyai minimal 1 orang SDM IT
Alur mendapatkan SIMRS GOS:

  1. Mengajukan permohonan kepada Sesditjen BUK
  2. Kunjungan Tim Pusat untuk melihat kesiapan Infrastruktur di RS
  3. Rekomendasi Tim kepada Pimpinan di Pusat maupun RS terhadap implementasi SIMRS di RS
  4. Instalasi dan sosialisasi
  5. Pendampingan Tahapan Setelah Implementasi Penyerahan Dokumentasi Teknis
Tahapan Setelah Implementasi Penyerahan Dokumentasi Teknis
  • Maintenance (sendiri, Pihak ke 3 atau lainnya)
  • Pengembangan (sendiri, Pihak ke 3 atau lainnya)
  • Evaluasi berkala dari Pusat

Tanya Tentang SIMRS GOS

Sistem  Informasi  Manajemen  Rumah  Sakit  (SIMRS)  adalah  sebuah  sistem informasi  yang  terintegrasi  yang  disiapkan  untuk  menangani  keseluruhan proses manajemen Rumah Sakit, mulai dari pelayanan diagnosa dan tindakan untuk  pasien,  medical  record,  apotek,  gudang  farmasi,  penagihan,    database personalia,  penggajian  karyawan,  proses  akuntansi  sampai  dengan pengendalian oleh manajemen 

Open source 
  • Source code dapat di buka dan dimodifikasi
  • Orang lain dapat mengetahui modul-modul dan cara kerja yang terdapat dalam software dan sekaligus memperbaikinya jika ada kelemahan-kelemahan 
  • Software dapat diperoleh dan digunakan secara gratis tanpa perlu membayar lisensi (freeware)

Tujuan SIMRS GOS
  • Agar rumah sakit dapat memiliki SIMRS untuk kemudian dapat dikembangkan sesuai dengan kebutuhan masing-masing
Dari penjelasan diatas maka kita tau bahwa SIMRS GOS bisa dimodifikasi dan dari pertanyaan yang saya terima via komentar blog via email maupun chating ternyata memang dalam proses implementasi SIMRS GOS masih terdapat beberapa kendala serta pihak rumah sakit perlu memodifikasi SIMRS GOS sesuai dengan bisnis prosesnya.

Menanggapi hal itu saya mencoba membantu jika pengguna SIMRS GOS yang memiliki kesulitan dalam proses implementasi SIMRS, jika anda mempunya pertanyaan dan kesulitan terkait SIMRS GOS silahkan ajukan disini atau bisa kontak saya via email.

Catatan :
Disini saya bukan pihak dari pengembang SIMRS GOS maupun dari pihak pemberi SIMRS GOS (Kemenkes), saya hanya ingin membantu apa yang bisa saya bantu dan saya tidak ada kepentingan apapun dalam hal ini. 
karna saya juga memiliki pekerjaan disalah satu perusahaan yang musti saya prioritaskan jadi mohon pengertiannya jika respon yang saya berikan lambat..

Bagi yang menginginkan source SIMRS GOS silahkan kunjungin website Kemenkes, jangan minta source disini karna saya tidak membagikan SIMRS GOS

terima kasih
Manusia yang berguna adalah yang bermanfaat bagi orang lain ( Indahnya Berbagi ILMU)

Merubah NOMR pada SIMRS GOS 2015

Belum lama ini ada seseorang menanyakan kenapa nomr diatas 100 maka nomr nya hanya 4 digit (0100) padahal seharusnya nomr minimal 6 digit tapi kl nomr dibawah 100 maka nomr sesuia 6 digit (000099), ada apakah dengan sistem penomoran pada simrs gos 2015?

Dari pertanyaan diatas maka saya coba mengotak-atik source code simrs gos 2015, ternyata ada code yang harus saya rubah untuk menyesuaikan penomoran pada simrs gos 2015, yakni saya rubah file pendaftaran.php yang ada didalam folder models..berikut ini source codenya :


saya hanya merubah sedikit kodenya..pada bagian berikut

if(trim($_POST['NOMR']) != ''){
$Y=date('y');
$sqlrak="SELECT * from m_maxnomr where status='1'";
$rsqlrak=mysql_query($sqlrak);
$rowsqlrak=mysql_fetch_array($rsqlrak);
$nomor1 = $rowsqlrak['last2']+1;
if ($rowsqlrak['last2'] <= 10 ){
$nomr1 = str_pad($nomor1,6,"0",STR_PAD_LEFT);
$nomr  = $nomr1;
} else if ($rowsqlrak['last2'] <= 100 ){
$nomr1 = str_pad($nomor1,5,"0",STR_PAD_LEFT);
$nomr  = $nomr1;
} else if ($rowsqlrak['last2'] <= 1000 ){
$nomr1 = str_pad($nomor1,4,"0",STR_PAD_LEFT);
$nomr  = $nomr1;
} else if ($rowsqlrak['last2'] <= 10000 ){
$nomr1 = str_pad($nomor1,3,"0",STR_PAD_LEFT);
$nomr  = $nomr1;
} else if ($rowsqlrak['last2'] <= 100000 ){
$nomr1 = str_pad($nomor1,2,"0",STR_PAD_LEFT);
$nomr  = $nomr1;
} else if ($rowsqlrak['last2'] <= 1000000 ){
$nomr  = $nomr1;
}
mysql_query("update m_maxnomr set last2='".$nomr."' where status='1' ");

if($_POST['PASIENBARU']=="1"){

$sqlsearchpasien = "select NAMA from m_pasien WHERE NOMR = '".trim($_POST['NOMR'])."'";
$rowpasien = mysql_query($sqlsearchpasien)or die(mysql_error());
if(mysql_num_rows($rowpasien) > 0){
#$_error_msg = $_error_msg."No MR Sudah Digunakan,";
//$nomr  = $rowsqlrak[no_rak].getLastNoM("1");
$nomr  = $nomr1;
}else{
$nomr = trim($_POST['NOMR']);
}
}else{
$sqlsearchpasien = "select NAMA from m_pasien WHERE NOMR = '".trim($_POST['NOMR'])."'";
$rowpasien = mysql_query($sqlsearchpasien)or die(mysql_error());
if(mysql_num_rows($rowpasien) > 0) {
$ketemu = "1";
$nomr = trim($_POST['NOMR']);
}else{
//$nomr  = $rowsqlrak['no_rak'].getLastNoM("1");
$nomr  = $nomr1;
}
}
}else{
$sqlrak = "SELECT * from m_maxnomr where status='1'";
$rsqlrak = mysql_query($sqlrak);
$rowsqlrak = mysql_fetch_array($rsqlrak);
$nomor1 = $rowsqlrak['last2']+1;
if ($rowsqlrak['last2'] <= 10 ){
$nomr1 = str_pad($nomor1,6,"0",STR_PAD_LEFT);
$nomr  = $nomr1;
} else if ($rowsqlrak['last2'] <= 100 ){
$nomr1 = str_pad($nomor1,5,"0",STR_PAD_LEFT);
$nomr  = $nomr1;
} else if ($rowsqlrak['last2'] <= 1000 ){
$nomr1 = str_pad($nomor1,4,"0",STR_PAD_LEFT);
$nomr  = $nomr1;
} else if ($rowsqlrak['last2'] <= 10000 ){
$nomr1 = str_pad($nomor1,3,"0",STR_PAD_LEFT);
$nomr  = $nomr1;
} else if ($rowsqlrak['last2'] <= 100000 ){
$nomr1 = str_pad($nomor1,2,"0",STR_PAD_LEFT);
$nomr  = $nomr1;
} else if ($rowsqlrak['last2'] <= 1000000 ){
$nomr  = $nomr1;
}
mysql_query("update m_maxnomr set last2='".$nomr."' where status='1' ");
mysql_query('update m_maxnomr set nomor="'.$nomr.'"');
$ketemu = 0;
}


saya rubah menjadi :

if(trim($_POST['NOMR']) != ''){
$Y=date('y');
$sqlrak="SELECT * from m_maxnomr where status='1'";
$rsqlrak=mysql_query($sqlrak);
$rowsqlrak=mysql_fetch_array($rsqlrak);
$nomor1 = $rowsqlrak['last2']+1;
if ($rowsqlrak['last2'] <= 10 ){
$nomr1 = str_pad($nomor1,6,"0",STR_PAD_LEFT);
$nomr  = $nomr1;
} else if ($rowsqlrak['last2'] <= 100 ){
$nomr1 = str_pad($nomor1,6,"0",STR_PAD_LEFT);
$nomr  = $nomr1;
} else if ($rowsqlrak['last2'] <= 1000 ){
$nomr1 = str_pad($nomor1,6,"0",STR_PAD_LEFT);
$nomr  = $nomr1;
} else if ($rowsqlrak['last2'] <= 10000 ){
$nomr1 = str_pad($nomor1,6,"0",STR_PAD_LEFT);
$nomr  = $nomr1;
} else if ($rowsqlrak['last2'] <= 100000 ){
$nomr1 = str_pad($nomor1,6,"0",STR_PAD_LEFT);
$nomr  = $nomr1;
} else if ($rowsqlrak['last2'] <= 1000000 ){
$nomr  = $nomr1;
}
mysql_query("update m_maxnomr set last2='".$nomr."' where status='1' ");

if($_POST['PASIENBARU']=="1"){

$sqlsearchpasien = "select NAMA from m_pasien WHERE NOMR = '".trim($_POST['NOMR'])."'";
$rowpasien = mysql_query($sqlsearchpasien)or die(mysql_error());
if(mysql_num_rows($rowpasien) > 0){
#$_error_msg = $_error_msg."No MR Sudah Digunakan,";
//$nomr  = $rowsqlrak[no_rak].getLastNoM("1");
$nomr  = $nomr1;
}else{
$nomr = trim($_POST['NOMR']);
}
}else{
$sqlsearchpasien = "select NAMA from m_pasien WHERE NOMR = '".trim($_POST['NOMR'])."'";
$rowpasien = mysql_query($sqlsearchpasien)or die(mysql_error());
if(mysql_num_rows($rowpasien) > 0) {
$ketemu = "1";
$nomr = trim($_POST['NOMR']);
}else{
//$nomr  = $rowsqlrak['no_rak'].getLastNoM("1");
$nomr  = $nomr1;
}
}
}else{
$sqlrak = "SELECT * from m_maxnomr where status='1'";
$rsqlrak = mysql_query($sqlrak);
$rowsqlrak = mysql_fetch_array($rsqlrak);
$nomor1 = $rowsqlrak['last2']+1;
if ($rowsqlrak['last2'] <= 10 ){
$nomr1 = str_pad($nomor1,6,"0",STR_PAD_LEFT);
$nomr  = $nomr1;
} else if ($rowsqlrak['last2'] <= 100 ){
$nomr1 = str_pad($nomor1,6,"0",STR_PAD_LEFT);
$nomr  = $nomr1;
} else if ($rowsqlrak['last2'] <= 1000 ){
$nomr1 = str_pad($nomor1,6,"0",STR_PAD_LEFT);
$nomr  = $nomr1;
} else if ($rowsqlrak['last2'] <= 10000 ){
$nomr1 = str_pad($nomor1,6,"0",STR_PAD_LEFT);
$nomr  = $nomr1;
} else if ($rowsqlrak['last2'] <= 100000 ){
$nomr1 = str_pad($nomor1,6,"0",STR_PAD_LEFT);
$nomr  = $nomr1;
} else if ($rowsqlrak['last2'] <= 1000000 ){
$nomr  = $nomr1;
}
mysql_query("update m_maxnomr set last2='".$nomr."' where status='1' ");
mysql_query('update m_maxnomr set nomor="'.$nomr.'"');
$ketemu = 0;
}

intinya saya hanya merubah pada nilai
$nomr1 = str_pad($nomor1,5,"0",STR_PAD_LEFT);
menjadi
$nomr1 = str_pad($nomor1,6,"0",STR_PAD_LEFT);
dan seterusnya

maaf kalo tulisan saya sulit dimengerti, semoga tulisan saya ini bisa bermanfaat.
Terima kasih


Bagi yang menginginkan source SIMRS GOS silahkan kunjungin website Kemenkes, jangan minta source disini karna saya tidak membagikan SIMRS GOS

SIMRS GRATIS

SIMRS GRATIS


Sistem Informasi Manajemen Rumah Sakit Generic Open Source (SIMRS) 
sebuah sistem informasi yang terintegrasi yang disiapkan oleh Ditjen BUK untuk menangani keseluruhan proses manajemen Rumah Sakit, mulai dari front office sampai back office, terdiri dari beberapa modul yaitu :

  1. Modul Registrasi
  2. Modul Poli (Sesuai dengan Pelayanan yang ada)
  3. Modul Radiologi
  4. Modul Laboratorium
  5. Modul admission 
  6. Modul Rawat Inap
  7. Modul Integrasi JKN (INA CBG & SEP)
  8. Modul Apotik
  9. Modul Pembayaran / Billing System
  10. Modul Rawat Jalan
  11. Modul IGD
  12. Modul Adm
  13. Modul Logistik
  14. Modul Gudang
  15. Modul Jasa Pelayanan
  16. Modul Keuangan
  17. Modul Eksekutif
  18. Modul Keperawatan
  19. Modul Gizi
  20. Modul Kamar Operasi
  21. Modul Rekam Medik

SIMRS GOS
  1. Gratis bagi RS baik Pemerintah maupun Swasta
  2. Dibangun menggunakan bahasa pemrograman PHP dan database MySQL
  3. Open Source, sehingga mudah untuk di modifikasi.
  4. Seluruh modul diatas merupakan satu kesatuan utuh, saling terintegrasi. 
  5. SIMRS ini sudah Bridging dengan Aplikasi INACBG dan SEP-BPJS,
  6. SIMRS ini juga dirancang untuk pengiriman pelaporan RS (SP2RS), sehingga nantinya rumah sakit tidak perlu lagi membuat laporan.
  7. SIMRS ini dapat di integrasikan dengan SIRANAP (Sistem Informasi Rawat Inap Indonesia)
  8. Setiap tahun SIMRS ini dilakukan pengembangan, disesuaikan dengan perkembangan teknologi dan regulasi dari Kementerian kesehatan.
    Cara Mendapatkan SIMRS GOS

  • Mengajukan surat permohonan SIMRS GOS kepada Dirjen Bina Upaya Kesehatan
  • RS mempunyai infrastruktur IT (Jaringan, Komputer dan Server) & SDM IT

Troubleshooting INACBG

Trouble Shooting Software INA-CBG 4.0

Antivirus

Solusi

1. Ganti Antivirus yang dapat mengenali service Software INA-CBGs 4.0
2. Atau Disable Antivirus yang memblok Software INA-CBGs 4.0
3. Install Kembali Software INA-CBGs 4.0

Tidak dapat ber operasional

Solusi

1. Unistall software lain yang menggunakan database MySql
2. Uninstal windows service yang menggunakan port sama dengan apache atau mysql

Data Base Corupt

U ntuk Database Corupt sering terjadi dikarenakan Komputer Software INA-CBGs 4.0 Mati Lampu

Solusi :

a. back up database sw INA CBGs 4.0
b. Lakukan proses restore database
c. Atau lakukan proses repair database secara manual melalui mysql administrator

Error Grouper Date Not Valid

Hal ini terjadi dikarenakan Grouper tidak berjalan sehingga menghasilkan error grouper

Solusi :

Untuk masalah grouper Convertion from string to type “Date” is not valid. ikuti langkah-langkah sebagai berikut :
1. Masuk kedalam folder extra
2. Instal Unugrouper30s
3. Instal Library Setup
4. Instal update40

Tahapan Aktivasi Software INA-CBG 4.0

1. Memiliki master software INA-CBG 4.0
2. Memiliki Kode Registrasi Rumah Sakit (7 digit)
3. Melakukan aktivasi dengan cara :
a. Update data dasar RS Online (www.buk.depkes.go.id)
     -> banner rs online
b. Mengirimkan email berisi :
    - Nama RS,
    - Kode RS,
    - Nama-nomor HP-email Petugas (koder/IT)
    - ke centerforcasemix@yahoo.com
c. Menunggu email feedback berupa link download database INA-CBG
d. Melakukan instalasi patch database INA-CBG ke dalam software INA-CBG yang sudah terinstal

Daftar Kontak
Email :
centerforcasemix@yahoo.com
Telepon/Faks :
021 – 526 1813

Bridging BPJS

Overview

Secara umum, hampir setiap pemanggilan web-service, harus dicantumkan beberapa variabel yang dibutuhkan untuk menambahkan informasi ataupun untuk proses validasi yang dikirim pada HTTP Header, antara lain:

Nama Header
Contoh Nilai
Keterangan
Accept
application/xml, application/json
format data yang diinginkan
X-cons-id
743627386
consumer ID dari ASKES
X-timestamp
234234234
generated unix-based timestamp
X-signature
DogC5UiQurNcigrBdQ3QN5oYvXeUF5E82I/LHUcI9v0=
generated signature dengan pola HMAC-256
  1. Accept, diisi sesuai permintaan dari client. Jika menginginkan hasil balik dari web-service dalam format XML, maka diisi dengan application/xml. Ataupun jika menginginkan hasil balik dari web-service dalam berupa JSON, maka dapat diisi dengan application/json. Secara default (jika tidak ditulis) maka hasil balik berupa JSON.
  2. X-cons-id, merupakan kode consumer (pengakses web-service). Kode ini akan diberikan oleh ASKES.
  3. X-timestamp, merupakan waktu yang akan di-generate oleh client saat ingin memanggil setiap service. Format waktu ini ditulis dengan format unix-based-time (berisi angka, tidak dalam format tanggal sebagaimana mestinya). Format waktu menggunakan Coordinated Universal Time ( UTC), dalam penggunaannya untuk mendapatkan timestamp, rumus yang digunakan adalah  (local time in UTC timezone in seconds) - (1970-01-01 in seconds).
                contoh penggunaan dalam php yaitu :
        

date_default_timezone_set('UTC');
$tStamp = strval(time()-strtotime('1970-01-01 00:00:00'));
        
  1. X-signature, merupakan hasil dari pembuatan signature yang dibuat oleh client. Signature yang digunakan menggunakan pola HMAC-SHA256.
Untuk dapat mengakses web-service dari BPJS Kesehatan (service provider), pemanggil web service (service consumer) akan mendapatkan:
  • Consumer ID  
  • Consumer Secret
Informasi Consumer Secret, hanya disimpan oleh service consumer. Tidak dikirim ke server web-service, hal ini untuk menjaga pengamanan yang lebih baik. Sedangkan kebutuhan Consumer Secret ini adalah untuk men-generate Signature (X-signature).
Contoh:
consumerID : 1234
consumerSecret : pwd
timestamp : 433223232
variabel1 : consumerID&timestamp
variabel1 : 1234&433223232

Signature : HMAC-256(value : key)
value : variabel1
key : consumerSecret
Signature : HMAC-256(variabel1 : consumerSecret)

TOOLS TESTING WEB SERVICE 

Sebelum mengakses web service melalui aplikasi, bisa digunakan tools tambahan (add-ons). Add-ons ini bisa di dapat dari software tambahan atau extension dari masing-masing browser favorit anda. Berikut link aplikasi Advanced Rest Client yang bisa digunakan dan di-download dari Chrome Web Store.
arc.png
SIGNATURE
Metode signature yang digunakan adalah menggunakan HMAC-SHA256, dimana paramater saat generate signature dibutuhkan parameter message dan key.
Berikut contoh hasil generate HMAC-SHA256
message : aaa
key : bbb
hasil generate HMAC-SHA256 : 20BKS3PWnD3XU4JbSSZvVlGi2WWnDa8Sv9uHJ+wsELA=
Diatas adalah hasil generate dari server BPJS Kesehatan
Berikut contoh pembuatan signature dari berbagai platform:
  1. Java


import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.GeneralSecurityException;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

import org.springframework.security.crypto.codec.Base64;

public class BpjsApi {

    public static void main(String[] args) throws GeneralSecurityException, IOException {

        String secretKey = "secretKey";
        String salt = "0123456789";

        String generateHmacSHA256Signature = generateHmacSHA256Signature(salt, secretKey);
        System.out.println("Signature: " + generateHmacSHA256Signature);

        String urlEncodedSign = URLEncoder.encode(generateHmacSHA256Signature, "UTF-8");

        System.out.println("Url encoded value: " + urlEncodedSign);
    }

    public static String generateHmacSHA256Signature(String data, String key) throws GeneralSecurityException {
        byte[] hmacData = null;

        try {
            SecretKeySpec secretKey = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");
            Mac mac = Mac.getInstance("HmacSHA256");
            mac.init(secretKey);
            hmacData = mac.doFinal(data.getBytes("UTF-8"));
            return new Base64Encoder().encode(hmacData);
        } catch (UnsupportedEncodingException e) {
            throw new GeneralSecurityException(e);
        }
    }
}
  1. PHP



   $data = "testtesttest";
   $secretKey = "secretkey";
         // Computes the timestamp
          date_default_timezone_set('UTC');
          $tStamp = strval(time()-strtotime('1970-01-01 00:00:00'));
           // Computes the signature by hashing the salt with the secret key as the key
   $signature = hash_hmac('sha256'$data."&".$tStamp$secretKey, true);

   // base64 encode…
   $encodedSignature = base64_encode($signature);

   // urlencode…
   // $encodedSignature = urlencode($encodedSignature);

   echo "X-cons-id: " .$data ."
";
   echo "X-timestamp:" .$tStamp ."
";
   echo "X-signature: " .$encodedSignature;

?>
  1. C#


namespace BpjsIntegration
{
    class Program
    {

        static void Main()
        {
            var data = "testtesttest";
            var secretKey = "secretkey";

            // Initialize the keyed hash object using the secret key as the key
            HMACSHA256 hashObject = new HMACSHA256(Encoding.UTF8.GetBytes(secretKey));

            // Computes the signature by hashing the salt with the secret key as the key
            var signature = hashObject.ComputeHash(Encoding.UTF8.GetBytes(data));

            // Base 64 Encode
            var encodedSignature = Convert.ToBase64String(signature);

            // URLEncode
            // encodedSignature = System.Web.HttpUtility.UrlEncode(encodedSignature);

            Console.WriteLine("Voila! A signature: " + encodedSignature);

            Console.ReadKey();

        }
    }
}
  1. VB.Net


Imports System.Security.Cryptography
Imports System.Text

Namespace BpjsIntegration
    Class Program

        Private Shared Sub Main()
            Dim data = "testtesttest"
            Dim secretKey = "secretkey"

            ' Initialize the keyed hash object using the secret key as the key
            Dim hashObject As New HMACSHA256(Encoding.UTF8.GetBytes(secretKey))

            ' Computes the signature by hashing the salt with the secret key as the key
            Dim signature = hashObject.ComputeHash(Encoding.UTF8.GetBytes(data))

            ' Base 64 Encode
            Dim encodedSignature = Convert.ToBase64String(signature)

            ' URLEncode
            ' encodedSignature = System.Web.HttpUtility.UrlEncode(encodedSignature)

            Console.WriteLine("Voila! A signature: " & encodedSignature)

            Console.ReadKey()

        End Sub
    End Class
End Namespace
  1. Ruby


# Required Libraries
require 'openssl'
require 'base64'
require 'URI'

data = "testtesttest"
secret_key = "secretkey"

# URL encode
def urlncode(string)
URI.escape(string, Regexp.new("[Generating an API Signature^#{URI::PATTERN::UNRESERVED}]"))
end

# Computes the signature by hashing the salt with the secret key as the key
hash = OpenSSL::HMAC.digest('sha256', secret_key, data)

# base64 encode...
# signature = urlncode(Base64.encode64(hash));
  1. Phyton


import hashlib
import random
import base64
import urllib
import hmac

data = "testtesttest"
secretkey = "secretkey"

# Computes the signature by hashing the data with the secret key as the key
signature = hmac.new(secretkey, msg=data, digestmod=hashlib.sha256).digest()

# base64 encode...
encodedSignature = base64.encodestring(signature).replace('\n''')

# urlencode...
encodedSignature = urllib.quote(encodedSignature)

print "Voila! A signature: " + encodedSignature
  1. Cocoa (iOS and Mac)


-(NSUInteger)GenerateSalt
{
    // random number (change the modulus to the length you'd like)
    NSUInteger r = arc4random() % 100000;
    return r;
}

-(NSString *)GenerateSignatureUsingSalt:(NSUInteger)salt
{
    /*
     Make sure you import:
     #import
     */

    NSString *key = SECRET_KEY;                                            // define your Secret Key string
    NSString *data = [NSString stringWithFormat:@"%u", salt];            // convert your random number

    const char *cKey  = [key cStringUsingEncoding:NSUTF8StringEncoding];
    const char *cData = [data cStringUsingEncoding:NSUTF8StringEncoding];

    unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];

    // Hash the salt with the secret key
    CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);

    // Create a data structure
    NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC
                                          length:sizeof(cHMAC)];

    // Base64-encode the signature
    NSString *hash = [HMAC base64Encoding];

    // URL-encode the signature
    // NSString * signatureURL = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
                                                                                 (CFStringRef)hash,
                                                                                 NULL,
                                                                                 (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
                                                                                 kCFStringEncodingUTF8 );

    return signatureURL;

}

Daftar Service

Service yang tersedia adalah sebagai berikut:

1. Cari peserta berdasarkan no.kartu BPJS


URL Tester                 : http://api.asterix.co.id/SepWebRest/peserta/{noKartu}

Parameter:
noKartu : no kartu BPJS
Output:
Format_Peserta

Contoh:



2. Cari peserta berdasarkan NIK


URL Tester                : http://api.asterix.co.id/SepWebRest/peserta/nik/{nik}

Parameter:
                    Nik : nomor induk kependudukan / no e-KTP
Output:
Format_Peserta

Contoh:

Format_Peserta


{
 "response":{
             "peserta":{
                        "noKartu":"0000142495694",
                        "nik":" ",
                        "nama":"MUJADID ANWAR HASAN",
                        "pisa":"2",
                        "sex":"P",
                        "tglLahir":"1979-05-13 00:00:00",
                        "tglCetakKartu":"1979-05-13 00:00:00",
                        "provUmum":{
                                    "kdProvider":"1301U007",
                                    "nmProvider":"MAULIDA JUNIAR, dr",
                                    "kdCabang":null,
                                    "nmCabang":null
                        },
                        "jenisPeserta":{
                                        "kdJenisPeserta":"1",
                                        "nmJenisPeserta":"PNS PUSAT"
                        },
                        "kelasTanggungan":{
                                           "kdKelas":null,
                                           "nmKelas":null
                        }
             }
 },"metaData":{
               "message":"200",
               "code":200
 }
}


3. Cari data rujukan berdasarkan no.rujukan


URL Tester                : http://api.asterix.co.id/SepWebRest/rujukan/{noRujukan}

Parameter :
noRujukan : no rujukan pasien BPJS melalui aplikasi PCare (Puskesmas/dokkel)
            Output:
Format_Rujukan

Contoh:



4. Cari data rujukan berdasarkan no.kartu BPJS


URL Tester                : http://api.asterix.co.id/SepWebRest/rujukan/peserta/{noKartu}

Parameter:
noKartu : no kartu BPJS
Output:
                    Format_Rujukan

Contoh:


Format_Rujukan


{
 "response":{
             "item":{
                     "noKunjungan":"000108011213Y000004",
                     "tglKunjungan":"2013-12-14 00:00:00",
                     "provKunjungan":{
                                     "kdProvider":"00010801",
                                     "nmProvider":"PUSK LANGSA BARO",
                                     "kdCabang":null,
                                     "nmCabang":null
                     },
                     "peserta":{
                                "noKartu":"0001089159052",
                                "nik":"",
                                "nama":"mr ganteng kaya sholeh",
                                "pisa":"2",
                                "sex":"L",
                                "tglLahir":"1984-06-16 00:00:00",
                                "tglCetakKartu":null,
                                "provUmum":{
                                           "kdProvider":"00010801",
                                           "nmProvider":"PUSK LANGSA BARO",
                                           "kdCabang":null,
                                           "nmCabang":null
                                },
                                "jenisPeserta":null,
                                "kelasTanggungan":null
                      },
                      "keluhan":"sakit gigi",
                      "diagnosa":{
                                  "kdDiag":"K05",
                                  "nmDiag":"GINGTIVIS AND PERIODONTAL DISEA."
                      },
                      "catatan":"rujuk",
                      "pemFisikLain":"",
                      "provRujukan":{
                                    "kdProvider":"0105R001",
                                    "nmProvider":"RSU LANGSA",
                                    "kdCabang":null,
                                    "nmCabang":null
                      },
                      "poliRujukan":{
                                    "kdPoli":"GIG",
                                    "nmPoli":"Poli Gigi"
                      }
              }
 }
 ,"metaData":{
              "message":"200",
              "code":200
 }
}

5. Cari daftar pasien yang di-rujuk berdasarkan tanggal rujukan



Paramter :
                    {tglRujukan} = tanggal dengan format yyyy-MM-dd
                    {start} = start/mulai urutan data
                    {limit} = jumlah data
Output:
                    Format_Rujukan_list

Contoh:
Mengambil data dari urutan no.1 sebanyak 10 data

Mengambil data dari urutan no.11 sebanyak 10 data

Fungsi {start} dan {limit} berguna untuk paging pada layout tampilan aplikasi, dengan parameter {start} selalu berubah sesuai parameter, sedangkan parameter {limit} selalu sama.
- menampilkan {start} – {limit} dari {count} records
- menampilkan 1 – 10 dari 73 records


Format_Rujukan_list


{
 "response":{
             "start":1,
             "limit":10,
             "count":7,
             "list":[{
                      "noKunjungan":"000108031213Y000005",
                      "tglKunjungan":"2013-12-14 00:00:00",
                      "provKunjungan":{
                                      "kdProvider":"00010803",
                                      "nmProvider":"PUSK LANGSA KOTA",
                                      "kdCabang":null,
                                            "nmCabang":null
                      },
                      "peserta":{
                                "noKartu":"0000149156998",
                                "nik":" ",
                                "nama":"ITA ELLYZA",
                                "pisa":"3",
                                "sex":"P",
                                "tglLahir":"1979-04-17 00:00:00",
                                "tglCetakKartu":null,
                                "provUmum":{
                                           "kdProvider":"00010803",
                                           "nmProvider":"PUSK LANGSA KOTA",
                                           "kdCabang":null,
                                           "nmCabang":null
                                },
                                "jenisPeserta":null,
                                "kelasTanggungan":null
                       },
                       "keluhan":"dispepsia",
                       "diagnosa":{
                                  "kdDiag":"M23",
                                  "nmDiag":"INTERNAL DERANGEMENT OF KNEE"
                       },
                       "catatan":",,,,,,,,,,",
                       "pemFisikLain":"",
                       "provRujukan":{
                                     "kdProvider":"0105R001",
                                     "nmProvider":"RSU LANGSA",
                                     "kdCabang":null,
                                     "nmCabang":null
                       },
                       "poliRujukan":{
                                      "kdPoli":"INT",
                                      "nmPoli":"Poli Penyakit Dalam"
                       }
                       },
   . . . .
   . . . .
   . . . .
   . . . .                 
  {
   "noKunjungan":"000108031213Y000009",
                        "tglKunjungan":"2013-12-14 00:00:00",
                        "provKunjungan":{
                                        "kdProvider":"00010803",
                                        "nmProvider":"PUSK LANGSA KOTA",
                                        "kdCabang":null,
                                        "nmCabang":null
                        },
                        "peserta":{
                                   "noKartu":"0001089159276",
                                   "nik":"1174023107830003",
                                   "nama":"DEDE KURNIAWAN",
                                   "pisa":"1",
                                   "sex":"L",
                                   "tglLahir":"1985-07-07 00:00:00",
                                   "tglCetakKartu":null,
                                   "provUmum":{
                                              "kdProvider":"00010803",
                                              "nmProvider":"PUSK LANGSA KOTA",
                                              "kdCabang":null,
                                              "nmCabang":null
                                   },
                                   "jenisPeserta":null,
                                   "kelasTanggungan":null
                        },
                        "keluhan":"gigi berlubang",
                        "diagnosa":{
                                   "kdDiag":"K02",
                                   "nmDiag":"DENTAL CARIES"
                        },
                        "catatan":"cabut",
                        "pemFisikLain":"",
                        "provRujukan":{
                                      "kdProvider":"0105R001",
                                      "nmProvider":"RSU LANGSA",
                                      "kdCabang":null,
                                      "nmCabang":null
                        },
                        "poliRujukan":{
                                      "kdPoli":"GIG",
                                      "nmPoli":"Poli Gigi"
                        }
             }]
 },"metaData":{
               "message":"200",
               "code":200
 }
}

6. Pembuatan SEP

    (hanya untuk testing data. Untuk production, akan di-deploy WebService pada server lokal di RS)

Mulai Versi WS 1.4, URL Create SEP untuk Production menjadi

Request Method : POST
Header :
                    Content-type: application/xml
                    x-cons-id: ….
                    x-timestamp: ….
                x-signature: ...
Data:


 
   1234567890123
   2013-07-26 13:05:03
   2013-07-26 13:05:03
   1234590000300003
   09010100
   0901R001
   1
   dari WS
   B010
   SAR
   2
   JD
   1234
 

Keterangan:
        noKartu : no kartu BPJS
        tglSep : tanggal kedatangan/tanggal transaksi
        tglRujukan : tanggal kunjungan ke puskesmas/dokter keluarga
        noRujukan : no rujukan dari puskesmas/dokter keluarga
        ppkRujukan : kode puskesmas/dokter keluarga (versi BPJS)
        ppkPelayanan: kode RS anda (versi BPJS), akan di-validasi oleh service, pastikan gunakan userID service yang sesuai
        jnsPelayanan : 1: Rawat Inap, 2: Rawat Jalan
        catatan : catatan tambahan
        diagAwal : diagnosa dari puskesmas/dokter keluarga (ICD X, sama seperti INA-CBG)
        poliTujuan : poli tujuan di RS
        klsRawat : kelas rawat tanggungan peserta
        user : username pengguna aplikasi
        noMr : no medical records RS dari pasien

7. Update tanggal pulang pada SEP >> hanya ada pada Web Service lokal

Terjadi penolakan saat pembuatan SEP jika sistem mengidentifikasi bahwa pasien masih dalam status menginap. Untuk mengisi tanggal pulang pada sistem BPJS/SEP, hanya dapat dilakukan dengan menerima file hasil entrian dari sistem INA-CBGs (kemenkes). Namun hal ini biasa dilakukan/diberikan oleh pihak RS kepada pihak BPJS pada beberapa hari kemudian.
Untuk mengantisipasi kasus penolakan terhadap pasien, dibutuhkan suatu sistem yang dapat meng-update data pasien pada BPJS melalui sistem RS. Disinilah fungsi ini berguna untuk meng-update tanggal pulang pasien pada data BPJS yang mana saat sistem RS melakukan update tanggal pulang pada sistem RS, sekaligus mengakses WebService ini agar data pasien terupdate pada server BPJS.

Request Method : PUT
Header :
                    Content-type: application/xml
                    x-cons-id: ….
                    x-timestamp: ….
                x-signature: ...
Data:


 
   1234567890123456789
   2013-07-26 13:05:03
   0901R001
 

Keterangan:
        noSep : no transaksi SEP
        tglPlg : tanggal pulang pasien
        ppkPelayanan: kode RS anda (versi BPJS), akan di-validasi oleh service, pastikan gunakan userID service yang sesuai

8. Menyimpan mapping data transaksi >> hanya ada pada Web Service lokal

Setelah sistem RS men-generate SEP dan menyimpan transaksi pendaftaran pada sistem RS, maka data masing-masing no transaksi unik disimpan pada 2 sistem (BPJS dan RS). Fungsi ini berguna untuk menyimpan no transaksi tersebut, agar nantinya dapat melakukan audit trail yang lebih efisien

Request Method : POST
Header :
                    Content-type: application/xml
                    x-cons-id: ….
                    x-timestamp: ….
                x-signature: ...
Data:


 
   1234567890123456789
   98765432109876543210
   0901R001
 

Keterangan:
        noSep : no transaksi SEP
        noTrans : no transaksi pada aplikasi RS
        ppkPelayanan: kode RS anda (versi BPJS), akan di-validasi oleh service, pastikan gunakan userID service yang sesuai

9. Menghapus data transaksi SEP >> hanya ada pada Web Service lokal

Data SEP yang dapat dihapus hanya jika data tersebut belum dibuatkan FPK/tagihan ke Kantor Cabang BPJS setempat.

URL   Production         : http://IP_ADDRESS:PORT/SepLokalRest/sep/
Request Method : DELETE
Header :
                    Content-type: application/xml
                    x-cons-id: ….
                    x-timestamp: ….
                x-signature: ...
Data:


 
   1234567890123456789
   0901R001
 

Keterangan:
        noSep : no transaksi SEP
        ppkPelayanan: kode RS anda (versi BPJS), akan di-validasi oleh service, pastikan gunakan userID service yang sesuai

10. Mencari 5 (lima) riwayat kunjungan terakhir peserta >> hanya ada pada Web Service lokal

Melihat data 5 (lima) riwayat kunjungan terakhir peserta yang dimaksud. Dapat digunakan untuk menjadi acuan dalam meng-update tanggal pulang peserta, jika telah pulang.

Request Method : GET
Parameter:
noKartu : no kartu BPJS
Output:
Format_Riwayat_Kunjungan_Peserta

Contoh:

Format_Riwayat_Kunjungan_Peserta


{
response : {
start  1
limit   5
count5
list: [5]
0:  {
noSep: "0902R00106140001988"
tglSep: "2014-06-03 00:00:00"
tglPulang: "1900-01-01 12:00:00"
jnsPelayanan: "Rawat Jalan"
-poliTujuan: {
kdPoli: "JIW"
nmPoli: "Poli Penyakit Jiwa"
}
}
-1:  
{
noSep: "0902R00105140001855"
tglSep: "2014-05-05 00:00:00"
tglPulang: "2014-05-05 00:00:00"
jnsPelayanan: "Rawat Jalan"
-poliTujuan: {
kdPoli: "JIW"
nmPoli: "Poli Penyakit Jiwa"
}
}
-2:  
{
noSep: "0902R00104140003884"
tglSep: "2014-04-04 00:00:00"
tglPulang: "2014-04-04 00:00:00"
jnsPelayanan: "Rawat Jalan"
-poliTujuan: {
kdPoli: "JIW"
nmPoli: "Poli Penyakit Jiwa"
}
}
-3:  
{
noSep: "0902R00103140022235"
tglSep: "2014-03-24 00:00:00"
tglPulang: "2014-03-24 00:00:00"
jnsPelayanan: "Rawat Jalan"
-poliTujuan: {
kdPoli: "JIW"
nmPoli: "Poli Penyakit Jiwa"
}
}
-4:  
{
noSep: "0902R00103140014204"
tglSep: "2014-03-13 00:00:00"
tglPulang: "2014-03-13 00:00:00"
jnsPelayanan: "Rawat Jalan"
-poliTujuan: {
kdPoli: "JIW"
nmPoli: "Poli Penyakit Jiwa"
}
}
}
-metaData:
{
message: "OK"
code200
}
}

11. Mencari detail SEP >> hanya ada pada Web Service lokal

Melihat detail keterangan dari SEP .

URL Production             : http://IP_ADDRESS:PORT/SepLokalRest/sep/{noSEP}
Request Method : GET
Parameter:
noSEP : no Transaksi SEP
Output:
Format_Detail_SEP

Contoh:

Format_Detail_SEP


{
-response: {
sep: {
noSep: "0902R00101140000004"
-peserta: {
noKartu: "0000047622846"
niknull
nama: "HJ.UMRAH-HERRIYANRI"
pisa: "3"
sex: "P"
tglLahir: "1951-10-16 00:00:00"
tglCetakKartu: "2009-10-30 00:00:00"
provUmum:
{
kdProvider: "10050201"
nmProvider: "CIPUTAT"
kdCabangnull
nmCabangnull
}
jenisPeserta: {
kdJenisPeserta: "15"
nmJenisPeserta: "BUKAN PEKERJA LAIN-LAIN"
}
kelasTanggungan:
{
kdKelas: "1"
nmKelas: "Kelas I"
}
}
tglSep: "2014-01-02 00:00:00"
tglRujukan: "2014-01-02 00:00:00"
tglPulang: "2014-01-02 00:00:00"
noRujukan: ""
provRujukan:
{
kdProvider: "09020100"
nmProvider: "KEC TEBET"
kdCabangnull
nmCabangnull
}
provPelayanan: {
kdProvider: "0902R001"
nmProvider: "RSUP FATMAWATI"
kdCabangnull
nmCabangnull
}
jnsPelayanan: "Rawat Jalan"
catatan: ""
diagAwal: {
kdDiag: "T843"
nmDiag: "Mechanical comp other bone devices implants & grafts"
}
poliTujuan: {
kdPoli: "BED"
nmPoli: "Poli Bedah"
}
klsRawat: {
kdKelas: "3"
nmKelas: "Kelas III"
}
statSep: {
kdStatSep: "40"
nmStatSep: "40_Proses_Cabang"
}
byTagihan378878
}
}
-metaData:
{
message: "OK"
code200
}
}

12. Mencari PPK Rujukan >> hanya ada pada Web Service lokal

Mencari PPK berdasarkan kode atau nama untuk mengisi PPK rujukan.

Request Method : GET
Parameter:
xxx : Kode PPK atau Nama PPK
Output:
Format_Nama_PPK

Contoh:

Format_Nama_PPK


{
response: {
start1
limit10
count76
list: [4]
0:  {
kdProvider: "09020500"
nmProvider: "KEC KEBAYORAN BARU (Puskesmas)"
kdCabang: "0902"
nmCabang: "JAKARTA SELATAN"
}
-1:  {
kdProvider: "09020600"
nmProvider: "KEC KEBAYORAN LAMA (Puskesmas)"
kdCabang: "0902"
nmCabang: "JAKARTA SELATAN"
}
-2:  {
kdProvider: "09020601"
nmProvider: "KEL KEBAYORAN LAMA UTARA (Puskesmas)"
kdCabang: "0902"
nmCabang: "JAKARTA SELATAN"
}
-3:  {
kdProvider: "09020608"
nmProvider: "KEL KEBAYORAN LAMA SELATAN (Puskesmas)"
kdCabang: "0902"
nmCabang: "JAKARTA SELATAN"
}
}
-metaData:
{
message: "200"
code200
}
}