LAMAN TERKAIT

  1. Membuat Web Service PHP untuk jembatan ke Web Api INACBG
  2. Mengakses Web Service Jembatan
  3. Mengakses Web Service Jembatan dari Visual Basic 6


Pada Posting ini aku memberi satu contoh memanggil service dari Web service penghubung yang sudah kita buat. Maaf kalau cuma memberi satu contoh kasus soalnya susah mmotong kode yang terlanjur ada di production. Jadi aku kasih contoh yang paling mudah dipanggil.
Untuk Service yang lainnya cara memanggilnya sama saja

1. Dowload VBJSON di http://www.ediy.co.nz/vbjson-json-parser-library-in-vb6-xidc55680.html
2. Ekstrak VBJSON
3. Kopi file cStringBuilder.cls, cJSONScript.cls, JSON.bas ke folder project Bridging INACBG Visual Basic 6
4. Buka Visual Basic 6
5. Masukkan Class module cStringBuilder.cls dan cJSONScrip.cls ke project.


  • Klik kanan di project, pilih add -> Class Module



  • Klik Existing


  •  Pilih Class modul cJSONScripts



  • Lakukan Cara yang sama untuk CStringBuilder.cls


6. Masukkan Modul JSON.bas

  • Klik kanan di Project Explorer, Pilih Module



  • Pilih Exiting -> JSON.bas



7 Tambahkan reference "Microsoft Winhttp service"

  • Klik Menu Project -> Reference, Beri Checklist pada Microsoft Winhttp Service, Version 5.1. Klik OK


8. Buat Class Module BuatKlaimINACBG

  • Klik Kanan di Project Explorer, Pilih Add->Class Modules, Klik Class Modules, Klik Open

 
 

  • Beri nama "BuatKlaimPasienINACBG"




8.  Masukkan kode dibawah ini di class BuatKalimPasienINACBG

Private mNomorKartu As String
Private mNomorSEP As String
Private mNoRM As String
Private mNamaPasien As String
Private mTgl_Lahir As String
Private mGender As String
Private mServer As String



Public mPatien_Id As String
Public mAdmission_Id As String
Public mHospital_admission_Id As String
Public ServerCode As String
Public ServerMessage As String
Public PesanDuplikat As String
Property Get NomorKartu() As String
    NomorKartu = mNomorKartu
End Property
Property Let NomorKartu(Value As String)
    mNomorKartu = Value
End Property
Property Get NomorSEP() As String
    NomorSEP = mNomorSEP
End Property
Property Let NomorSEP(Value As String)
    mNomorSEP = Value
End Property
Property Get NoRM() As String
    NoRM = mNoRM
End Property
Property Let NoRM(Value As String)
    mNoRM = Value
End Property
Property Get NamaPasien() As String
    NamaPasien = mNamaPasien
End Property
Property Let NamaPasien(Value As String)
    mNamaPasien = Value
End Property
Property Get Tgl_Lahir() As String
    Tgl_Lahir = mTgl_Lahir
End Property
Property Let Tgl_Lahir(Value As String)
    mTgl_Lahir = Value
End Property
Property Get Gender() As String
    Gender = mGender
End Property
Property Let Gender(Value As String)
    mGender = Value
End Property
Property Get Server() As String
    Server = mServer
End Property
Property Let Server(Value As String)
    mServer = Value
End Property
Public Function getData()
    Dim Result As String
    Dim tPost As String
    Dim p As Object
 

 
    tPost = "nokartu=" & Me.NomorKartu & "&nosep=" & Me.NomorSEP & "&norm=" & Me.NoRM & "&namapasien=" & Me.NamaPasien & "&tgllahir=" & Format(Me.Tgl_Lahir, "yyyy-MM-dd 00:00:00") & "&jeniskelamin=" & Me.Gender


    Dim sUrl As String
    Dim response As String
    Dim xmlhttp As WinHttp.WinHttpRequest
    sUrl = "http://" & Me.Server & "/BuatKlaimBaru"

    Set xmlhttp = New WinHttp.WinHttpRequest
    xmlhttp.Open "POST", sUrl, False
    xmlhttp.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    xmlhttp.Send tPost

    If xmlhttp.Status = "200" Then
    response = xmlhttp.ResponseText

    Set xmlhttp = Nothing
        Result = response
        Set p = JSON.parse(Result)
        ServerMessage = p.Item("metadata").Item("message")
        ServerCode = p.Item("metadata").Item("code")
        If ServerCode = "200" Then
            mPatien_Id = p.Item("response").Item("patient_id")
            mAdmission_Id = p.Item("response").Item("admission_id")
            mHospital_admission_Id = p.Item("response").Item("hospital_admission_id")
            Call MsgBox("Pembuatan Klaim Baru Berhasil")
            frmDetailPasienInaCBG.cmdIsiDataKlaim.SetFocus
        Else
            If ServerCode = "400" Then
                PesanDuplikat = "Nama Pasien " & p("duplicate")(1).Item("nama_pasien") & vbNewLine & "NoRM = " & p("duplicate")(1).Item("nomor_rm") & " Tanggal = " & p("duplicate")(1).Item("tgl_masuk")
                Call MsgBox("Duplikasi Pasien " & vbNewLine & "Nama Pasien " & p("duplicate")(1).Item("nama_pasien") & vbNewLine & "NoRM = " & p("duplicate")(1).Item("nomor_rm") & " Tanggal = " & p("duplicate")(1).Item("tgl_masuk"))
                Exit Function
            End If
        End If
    Else
        Call MsgBox("SERVER ERROR", vbOKOnly)
        Exit Function
    End If
End Function




9. Buat Form Baru

Buat Form dengan isi
Label 6 buah
text box 1 line 6 buah
text box multi line 1 buat (untuk menampilkan response)
commandbox

Tata form supaya terlihat seperti dibawah ini:



Beri Caption dan nama textbox sesuai dengan labelnya, Untuk Lebih jelasnya lihat gambar diatas
lalu masukkan kode berikut di command Button

 Dim tt As BuatKlaimPasienINACBG
    Set tt = New BuatKlaimPasienINACBG
    tt.NomorKartu = txtNoKartu.Text
    tt.NomorSEP = txtNoSEP.Text
    tt.NoRM = txtNoRM.Text
    tt.Tgl_Lahir = txtTglLahir.Text
    tt.Gender = txtJK.Text
    tt.Server = "192.168.7.201/BridgingInaCBG"
    tt.getData

10. Test Program
Jalankan program
Coba masukkan data seperti dibawah ini

  • Klik Buat Klaim Pasien INACBG


Pada bahasan sebelumnya sudah saya tulis kalau key dari Bridging INACBG ini adalah nosep. Bila Bridging INACBG mendeteksi adanya double SEP maka akan keluar Pesan seperti ini:


Kalau berhasil pesannya seperti ini:



Demikianlah contoh mengakses web service dan JSON di Visual basic 6. Contoh source ini bisa di download di

https://drive.google.com/file/d/0B1NbkNRwjYEyVFNmWFdJWUZ5OG8/view?usp=sharing



Postingan ini adalah lanjutan dari  Bridging INA-CBG5 SIMRS dengan visual basic 6 dan PHP (PART 1).

Kembali ke pembahasan sebelumnya. Postingan ini ada 3 part.
  1. LAMAN TERKAIT

    1. Membuat Web Service PHP untuk jembatan ke Web Api INACBG
    2. Mengakses Web Service Jembatan
    3. Mengakses Web Service Jembatan dari Visual Basic 6




Sekarang kita mencoba memanggil service-service yang sudah kita buat di PHP dengan Rest Client.
Rest Client adalah software yang digunakan untuk melakukan test pada Web Api/Web Service.

Kalau kamu suka aplikasi desktop kamu bisa mendownload insomnia. Kalau saya suka memakai Advanced Rest Client. Advanced Rest Client adalah ekstention dari Google Chrome. Google Chrome adalah browser buatan Google. Google adalah mesin pencari terpopuler.

Web service yang kita buat kemarin menggunakan method "POST". Kenapa? karena dengan method "POST " kita lebih mudah melempar parameter dari aplikasi kita ke Web Service.

Tampilan Advanced Rest Client bisa dilihat dibawah ini


Test Web Service dengan Advance Rest Client
Test Web Service dengan Advance Rest Client

Tanda Panah paling atas adalah tempat alamat url Web Service lokal kita
dibawahnya ada "Method" Web Service. Pilih method "POST" (Karena web service kita menggunakan method "POST")
Raw Headers diisi "Content-Type: application/x-www-form-urlencoded".
Tanda Panah paling bawah adalah parameter POST yang dikirim ke web service.


Sekarang kita coba service-nya satu persatu. hasil keluaran web service tetap berupa JSON, karena format ini sangat populer dan parsernya (penerjemah JSON ke format lain) sudah ada di banyak bahasa pemrograman.

Buat Klaim Baru

Digunakan untuk membuat klaim dan pasien baru INACBG. Kalau di aplikasi E-Klaim kita membuat pasien baru kemudian baru membuat klaim baru. Kalau dari bridging kita juga harus mengirim no SEP. 
di Klaim baru ini yang jadi key-nya nomor SEP, jadi nomor SEP tidak boleh kembar.

parameter yang dikirim 
  1. nokartu
  2. nosep
  3. norm
  4. namapasien
  5. tgllahir
  6. jeniskelamin
Cara menggunakannya seperti ini 

Url                : http://xxx.xxx.x.x/BridgingInaCBG/BuatKlaimBaru
Method         : POST 
Raw Header  : Content-Type: application/x-www-form-urlencoded
Parameter POST/Raw Payload : nokartu=testnokartu&nosep=testnosep&norm= testnorm&namapasien=testnamapasien&tgllahir=2004-01-01&jeniskelamin=1

ISI/UPDATE KLAIM

Service ini digunakan untuk mengisi klaim, jika klaim sudah ada maka otomatis akan di update

Parameter yang dikirim:

  1. nosep
  2. nokartu
  3. tglmasuk
  4. tglpulang
  5. tgllahir
  6. jenis_rawat
  7. kelas_rawat
  8. adl_sub_acute
  9. adl_chronic
  10. icu_indikator
  11. icu_los
  12. ventilatot_hour
  13. upgrade_class_ind
  14. upgrade_class_class
  15. upgrade_class_los
  16. birth_weight
  17. discharge_status
  18. diagnosa
  19. procedure
  20. tarif_rs
  21. tarif_poli_eks
  22. nama_dokter
  23. kode_tarif
  24. payor_id
  25. payor_cd
  26. coder_nik
Cara memangilnya contohnya seperti ini:

Url                : http://xxx.xxx.x.x/BridgingInaCBG/IsiDataKlaim
Method         : POST 
Raw Header  : Content-Type: application/x-www-form-urlencoded
Parameter POST/Raw Payload : nosep=testnosep&nokartu=testnokartu&tgl_masuk=2017-01-01 00:00:00&tgl_pulang=2017-01-01 00:00:00&tgllahir=2017-01-01 00:00:00&jenis_rawat=2&kelas_rawat=3&adl_sub_acute=&adl_chronic=&icu_indicator=&icu_los=&ventilator_hour=&upgrade_class_ind=&
upgrade_class_class=&upgrade_class_los=&birth_weight=&discharge_status=&diagnosa=N86&procedure=91.46&tarif_rs=50000&tarif_poli_eks=0&
nama_dokter=Eko&kode_tarif=BP&payor_id=3&payor_cd=JKN&coder_nik=xxxxxxxxxxxxxxxxxxxx


GROUPER 1

Setelah Isi/Update Klaim langkah selanjutnya adalah menggrouper.

parameter yang dikirim cuma NoSEP



Url                : http://xxx.xxx.x.x/BridgingInaCBG/Grouper1
Method         : POST 
Raw Header  : Content-Type: application/x-www-form-urlencoded
Parameter POST/Raw Payload : nosep=testnosep

GROUPER 2

Kalau digrouper 1 ditemukan Special cmg, maka grouper 2 wajib dilakukan (kalau nggak mau sih nggak apa-apa). Tetapi kalau tidak ada ya nggak usah dilakukan.

Parameter yang dikirim:
  1. nosep
  2. special_cmg
Url                : http://xxx.xxx.x.x/BridgingInaCBG/Grouper2
Method         : POST 
Raw Header  : Content-Type: application/x-www-form-urlencoded

Parameter POST/Raw Payload : nosep=testnosep&special_cmg=YY01#RR04

FINAL KLAIM

Setelah semua proses grouper selesai, langkah selanjutnya adalah Final Klaim

Parameter yang dikirm

  1. nosep
  2. coder_nik

Url                : http://xxx.xxx.x.x/BridgingInaCBG/FinalKlaim
Method         : POST 
Raw Header  : Content-Type: application/x-www-form-urlencoded

Parameter POST/Raw Payload : nosep=testnosep&coder_nik=3374132708800008


KIRIM DATA ONLINE

Kirim data online ini masuk ke katalog web service lokal juga, tapi nggak usah 
dibuat kodingnya. Soalnya sudah aku panggil langsung waktu menjalankan servire Final Klaim

Parameter yang dikirim : nosep
Url                : http://xxx.xxx.x.x/BridgingInaCBG/KirimOnline

Method         : POST 
Raw Header  : Content-Type: application/x-www-form-urlencoded


Parameter POST/Raw Payload : nosep=testnosep

Kalau sudah khatam dibagian ini kita langsung nyoba aja Mengakses Web Service Jembatan dari Visual Basic 6









INA CBG EKLAIM
INA CBG EKLAIM

LAMAN TERKAIT

  1. Membuat Web Service PHP untuk jembatan ke Web Api INACBG
  2. Mengakses Web Service Jembatan
  3. Mengakses Web Service Jembatan dari Visual Basic 6

APLIKASI INA-CBG

INA-CBG merupakan singkatan dari Indonesia Case Base Groups. Aplikasi yang dikeluarkan oleh Kementrian Kesehatan ini digunakan Rumah Sakit untuk mengajukan klaim pada pemerintah. Dalam penentuan tarif INA-CBG menggunakan sistem paket berdasarkan penyakit yang diderita oleh pasien. Aplikasi INA-CBG akan menghasilkan kode INA-CBG berdasarkan diagnosa penyakit dan diagnosa tindakan pasien. Bisa diartikan juga Kode INA-CBG adalah kode kumpulan kelompok penyakit.Dengan INA-CBG, rumah sakit akan mendapatkan pembayaran rata-rata yang dihabiskan oleh suatu kelompok penyakit. 
Aplikasi INA-CBG dikembangkan dari sistem casemix UNU-IIGH (The United Nations University-International Institute for Global Health). Jadi sistem ini sudah digunakan oleh banyak negara juga.

Dulu aku sempat bingung dengan istilah-istilah di INA-CBG. Contohnya istilah ngoding. Ceritanya mas dodo tanya "Mas caranya batal final itu gimana?"  Karena aku orang baru disitu. Jangankan batal final, cara memfinal saja aku tidak tahu. Lha caranya memfinal gimana mas? tanyaku. Lalu dia jawab "Setelah selesai koding kan terus final mas". 
Aku sangat takjub dengan keahlian mas Dodo, ternyata selain ahli mengurusi berkas rekam medis, mas dodo ini pintar bahasa pemrograman. Aku saja yang sudah agak lama belajar ngoding tetap nggak bisa menata dokumen rekam medis (Kalau pun bisa juga percuma). "Ya udah mas, berarti tinggal di edit saja tho kodingannya" Jawabku polos. Rupanya dia sadar kalau aku salah arah, eh maksudnya gagal paham. Skip skip. 
Sekarang aku jelaskan arti kata ngoding, dan koder. Orang rekam medis yang memeriksa dan menginput kode diagnosa yang akan dimasukkan ke INA-CBG disebut koder. Proses memasukkan diagnosa ke aplikasi INA-CBG disebut ngoding. Jadi ngoder dan ngoding itu adalah istilah meramu diagnosa untuk mendapatkan hasil kode inacbg yang sesuai.

BRIDGING SIMRS

INA-CBG memberikan fasilitas Bridging dengan service SEP BPJS dan juga dengan SIMRS. untuk integrasi dengan server SEP BPJS cukup mudah. Kamu tinggal masukkan Cons-Id, Secret Key dan alamat web service SEP di tempat kamu dan cring. SEP dan INA-CBG akan langsung terkoneksi.

INA-CBG juga menyediakan service untuk bridging INA-CBG dengan SIMRS. untuk lebih detailnya bisa dibaca disini:
https://inacbg.kemkes.go.id/DL/Petunjuk_Teknis_Eklaim_Build_5.1.0.201703170645.pdf

Sebelum melakukan bridging, Rumah sakit disarankan membuat enkripsi key. Enkripsi key ini nantinya akan menjadi pengaman komunikasi data antara Aplikasi INA-CBG dengan Aplikasi SIMRS.

Untuk menggenerate enkripsi key, buka menu - Integrasi - SIMRS

laman integrasi simrs
Laman Integrasi SIMRS




Klik tombol "Generate Key" Untuk menggenerate kata kunci enkripsi. Klik "Yes" selanjutnya masukkan kode captha dan tralaaa Enkryption key kamu sudah jadi.

Mekanisme koneksi web service INA-CBG dengan SIMRS bisa kamu lihat di gambar ini:
Flow Koneksi SIMRS ke Web Service INA-CBG
Flow Koneksi SIMRS ke Web Service INA-CBG 

SIMRS mengirim data ke E-Klaim dengan method "POST". Permintaan/request dimasukkan di body post dengan format json yang terenkripsi. Setelah permintaan diproses oleh E-Klaim. E-Klaim akan memberikan hasil yang juga di enkripsi. Setelah data sampai di SIMRS, data akan dedecode menjadi json yang tidak terenkripsi.

Sederhana bukan? Kalau kamu pakai php itu menjadi sederhana sekali. Apalagi di Juknis sudah dicontohkan enkripsi dan dekripsinya. Namun berbeda kalau kamu memakai aplikasi lain. Kalau tidak salah enkripsi INA-CBG menggunakan enkripsi AES 256 bit. Kalau kamu tertarik untuk mengembangkan dengan aplikasi lain bisa kamu coba tuh.

Untuk mencoba memanggil servicenya, kamu bisa pakai aplikasi rest client kesukaanmu. Aku sendiri suka memakai Advanced Rest Client di Google Chrome.

Contoh Penggunaan Advanced Rest Client untuk memanggi service INA-CGB
Contoh Penggunaan Advanced Rest Client untuk memanggi service INA-CGB


Alamat web service bisa diakses di
     http://alamat_server_aplikasi/E-Klaim/ws.php
Untuk mode debug, kamu cukup menambahkan mode=debug
    http://alamat_server_aplikasi/E-Klaim/ws.php?mode=debug


Alamat Url:     http://localhost/E-Klaim/ws.php?mode=debug
Contoh Method/Request Buat Klaim Baru (Update Jika Sudah Ada)
    {
     "metadata": {
     "method": "new_claim"
      },
     "data": {
                  "nomor_kartu": "0000668870001",
                  "nomor_sep": "1710R01011160000249",
                   "nomor_rm": "123-45-67",
                   "nama_pasien": "NAMA TEST PASIEN",
                   "tgl_lahir": "1940-01-01 02:00:00",
                   "gender": "2"
                   }
        }

Kemudian Contoh hasilnya sepeti berikut

{
 "metadata": {
 "code": 200,
 "message": "Ok"
 },
 "response": {
 "patient_id": 453,
 "admission_id": 1,
 "hospital_admission_id": 678
 }
}

Pesan Error jika ada duplikasi data


{
 "metadata": {
 "code": 400,
 "message": "Duplikasi nomor SEP",
 "error_no": "E2007"
 },
 "duplicate": [
 {
 "nama_pasien": "TEST PASIEN",
 "nomor_rm": "3849988",
 "tgl_masuk": "2016-12-19 21:10:07"
 },
 {
 "nama_pasien": "TEST TEST",
 "nomor_rm": "3887726",
 "tgl_masuk": "2016-12-23 04:48:53"
 }
 ]
}

Mode Debug sangat tidak direkomendasikan dan hanya digunakan untuk testing saja. 

Salah satu tujuanku menulis tentang artikel ini juga supaya teman-teman yang kesulitan di Enkripsi dan memakai mode debug di web service INA-CBG. 
Karena mode ini bisa sewaktu-waktu dihapus dari Service INA-CBG. 

Seperti yang tak bold diatas, tujuan artikel ini agar teman-teman sesama pengoding aplikasi bridging INA-CBG SIMRS tidak terbuai dengan manisnya mode debug. Karena aplikasi SIMRS memakai pihak ke-3 untuk terhubung dengan Web Service INA-CBG. Trus kelebihan memakai pihak ketiga itu apa? Kalau tidak cocok tinggal ganti CV aja, gitu aja kok repot.

Untuk daftar servicenya bisa kamu lihat di pdf yang sudah aku kasih linknya diatas. Beberapa web service yang penting untuk adalah web service yang berhubungan dengan input klaim, seperti:

  1. Membuat Klaim Baru
  2. Mengisi/Update Data Klaim
  3. Grouping Stage1
  4. Grouping Stage2
  5. Final
  6. Mengedit Ulang Klaim
6 service itu dulu, kalau dijalankan dengan istiqomah Insya Allah bridgingnya lancar.
PENDAHULUAN

Sebelum maju ke teknik koding, aku ceritakan dulu prinsip kerja bridging INA-CBG SIMRS yang aku pakai. Kalau boleh cerita. Awal ide ini karena aku sendiri merasa kesulitan dengan koneksi ke web service INA-CBG dengan Aplikasi Visual Basic 6. Kesulitan pertama, karena output keluarannya JSON. JSON itu keluarnya kapan. Visual Basic 6 Keluarnya kapan? Perlu teman-teman ketahui, Visual Basic 6 keluar sekitar tahun 1998 dan sekarang adalah tahun 2017. Mantab sekali. 

ALAT PERTAMA YANG DIBUTUHKAN ADALAH JSON PARSER
Apa itu Json Parse, Json parser adalah alat untuk merubah format JSON menjadi format yang dimengerti oleh aki-aki kayak mbah Visual Basic 6 ini. Sebelumnya pengen bikin sendiri. Tapi ilmu belum mumpuni, akhirnya googling aja deh :P. Alhamdulilah wa Syukurilah aku menemukan JSON PARSE yang mudah dan powerfull buat aku. Namanya VBJSON. Silahkan download di situs resminya:


ALAT KEDUA ADALAH WEB SERVER

JSON Parsernya sudah ketemu. Sekarang saatnya mencari kesulitan kedua. Alat keduaku adalah web server. Untuk web server aku rekomendasikan xampp, selain populer, xampp juga mudah dioperasikan.

Btw, kenapa alat keduanya web server?
Pada juknis bridging inacbg simrs kita diwajibkan memakai enkripsi. Kslau tidak salah inacbg menggunakan Enkripsi AES 256. Ngomong-ngomong tentang enkripsi aku jadi ingat sewaktu mendevelop Bridging SEP. Waktu itu aku sudah menemukan cara enkripsi HMAC SHA-1 di Visual Basic 6. Tetapi sayang, ternyata Enkrypsinya hanya bisa berjalan di Windows 7 ke-atas. Padahal ditempatku masih banyak yang pakai Windows XP. Lagi pula aplikasi simrs tempatku harus berjslan di compability mode Windows XP, soalnya Crystal Reportnya bakal ngambek.
Visual Basic 6 + Crystal Report 8.5, mereka memang romantis. Cinta mereka tak tergerus oleh zaman.

Dengan berbagai pertimbangan yang tidak matang. Maka aku memutuskan untuk memakai web service sebagai jembatan antara mereka (Visual Basic 6 dan API INA-CBG).

Memilih Framework PHP

Biar kekinian, aku sengaja nggak koding native untuk PHPnya. Setelah mencoba mencari-cari framework yang kekinian. CI, Laravel, Cake PHP, ternyata nggak ada yang cocok. Nggak ada yang cocok apa akunya yang nggak bisa ya? Mungkin semuanya benar.
Setelah lama memilih akhirnya aku memakai Slim Micro Framework. Kenapa memakai SLIM Micro Framework? Karena kesederhannannya. Saking sederhananya (cuma bisa untuk membuat REST). Slim bukan hanya kecil dan cepat, tetapi juga mudah dipelajari.
Buat yang kepo sama SLIM Micro Framework bisa meluncur kesini:

Slim Micro Framework
https://www.slimframework.com/

Lets Code!

MEMBUAT WEB SERVICE

Download SLIM Micro Framework.
Struktur file SLIM Micro Framework seperti gambar berikut.

Isi Folder SLIM MICRO FRAMEWORK (minus db.phpya,  itu file buatanku)
Isi Folder SLIM MICRO FRAMEWORK (minus db.phpya,  itu file buatanku)

Buat file konfigurasi. Sebagai contoh buat file db.php di folder utama SLIM micro Framework
Isi File konfigurasi db.php adalah seperti berikut:

<?php

function getKey() {
   $keyRS = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";   //Kunci Enkripsi Dari Eklaim
   return $keyRS;
}

function getUrlWS() {
    $UrlWS = "http://192.168.100.100/E-Klaim/ws.php";                         //IP SERVER EKLAIM
    return $UrlWS;
}

?>

Setelah file konfigurasinya disimpan. Sekarang kita buat file utamanya. Masukkan Koding ini ke file Index.php.
Di file Index.php semua fungsi bridging dimasukkan kesini. Aku sengaja memakai method "Post" pada web service penghubung ini, supaya koding pengiriman datanya lebih mudah.

<?php
require 'vendor/autoload.php';
require 'db.php';
use Slim\Http\Request;
use Slim\Http\Response;
use Slim\App;


$app = new Slim\App();


$app->get('/', 'Depan');
$app->post('/test', 'test');
$app->post('/BuatKlaimBaru', 'BuatKlaimBaru');
$app->post('/IsiDataKlaim', 'IsiDataKlaim');
$app->post('/AmbilDataKlaim', 'AmbilDataKlaim');
$app->post('/Grouper1', 'Grouper1');
$app->post('/Grouper2', 'Grouper2');
$app->post('/FinalKlaim', 'FinalKlaim');
$app->post('/KirimOnline', 'KirimOnline');
$app->post('/EditFinal', 'EditFinal');


$app->run();


/* METHOD GET DISINI */
/* ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
function Depan() {
  echo "Halaman Depan";
}

Function BuatKlaimBaru($request, $response, $args) {  
  
    $json = '{
   "metadata":{
      "method":"new_claim"
   },
   "data":{
      "nomor_kartu":"'.$request->getParsedBody()['nokartu'].'",
      "nomor_sep":"'.$request->getParsedBody()['nosep'].'",
      "nomor_rm":"'.$request->getParsedBody()['norm'].'",
      "nama_pasien":"'.$request->getParsedBody()['namapasien'].'",
      "tgl_lahir":"'.$request->getParsedBody()['tgllahir'].'",
      "gender":"'.$request->getParsedBody()['jeniskelamin'].'"
    }}';



    $json = mc_encrypt ($json, getKey());

    $ch = curl_init(getUrlWS());  

    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $result = curl_exec($ch);
    curl_close($ch);

    $result = str_replace ('----BEGIN ENCRYPTED DATA----', '', $result);
    $result = str_replace ('----END ENCRYPTED DATA----', '', $result);
    $result = mc_decrypt (getKey(), $result);              
    $response->write($result);  


    $response->write($result);  
    return $response;  
}
Function IsiDataKlaim($request, $response, $args) {  
    $nosep = $request->getParsedBody()['nosep'];
    $nokartu = $request->getParsedBody()['nokartu'];
    $tgl_masuk=$request->getParsedBody()['tgl_masuk'];
    $tgl_pulang=$request->getParsedBody()['tgl_pulang'];
    $jenis_rawat=$request->getParsedBody()['jenis_rawat'];
    $kelas_rawat=$request->getParsedBody()['kelas_rawat'];
    $adl_sub_acute=$request->getParsedBody()['adl_sub_acute'];
    $adl_chronic=$request->getParsedBody()['adl_chronic'];
    $icu_indicator=$request->getParsedBody()['icu_indicator'];
    $icu_los=$request->getParsedBody()['icu_los'];
    $ventilator_hour=$request->getParsedBody()['ventilator_hour'];
    $upgrade_class_ind=$request->getParsedBody()['upgrade_class_ind'];
    $upgrade_class_class=$request->getParsedBody()['upgrade_class_class'];
    $upgrade_class_los=$request->getParsedBody()['upgrade_class_los'];
    $birth_weight=$request->getParsedBody()['birth_weight'];
    $discharge_status=$request->getParsedBody()['discharge_status'];
    $diagnosa=$request->getParsedBody()['diagnosa'];
    $procedure=$request->getParsedBody()['procedure'];
    $tarif_rs=$request->getParsedBody()['tarif_rs'];
    $tarif_poli_eks=$request->getParsedBody()['tarif_poli_eks'];
    $nama_dokter=$request->getParsedBody()['nama_dokter'];
    $kode_tarif=$request->getParsedBody()['kode_tarif'];
    $payor_id=$request->getParsedBody()['payor_id'];
    $payor_cd=$request->getParsedBody()['payor_cd'];
    $coder_nik=$request->getParsedBody()['coder_nik'];
  
  
  
    $json = '{
   "metadata":{
      "method":"set_claim_data",
      "nomor_sep":"'.$nosep.'"
   },
   "data":{
      "nomor_sep":"'.$nosep.'",
      "nomor_kartu":"'.$nokartu.'",
      "tgl_masuk":"'.$tgl_masuk.'",
      "tgl_pulang":"'.$tgl_pulang.'",
      "jenis_rawat":"'.$jenis_rawat.'",
      "kelas_rawat":"'.$kelas_rawat.'",
      "adl_sub_acute":"'.$adl_sub_acute.'",
      "adl_chronic":"'.$adl_chronic.'",
      "icu_indikator":"'.$icu_indicator.'",
      "icu_los":"'.$icu_los.'",
      "ventilator_hour":"'.$ventilator_hour.'",
      "upgrade_class_ind":"'.$upgrade_class_ind.'",
      "upgrade_class_class":"'.$upgrade_class_class.'",
      "upgrade_class_los":"'.$upgrade_class_los.'",
      "birth_weight":"'.$birth_weight.'",
      "discharge_status":"'.$discharge_status.'",
      "diagnosa":"'.$diagnosa.'",
      "procedure":"'.$procedure.'",
      "tarif_rs":"'.$tarif_rs.'",
      "tarif_poli_eks":"'.$tarif_poli_eks.'",
      "nama_dokter":"'.$nama_dokter.'",
      "kode_tarif":"'.$kode_tarif.'",
      "payor_id":"'.$payor_id.'",
      "payor_cd":"'.$payor_cd.'",
      "coder_nik":"'.$coder_nik.'"
   }
}';
   //print_r($json);
    $json = mc_encrypt ($json, getKey());
    $ch = curl_init(getUrlWS());  

    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $result = curl_exec($ch);
    curl_close($ch);          


  

    $result = str_replace ('----BEGIN ENCRYPTED DATA----', '', $result);
    $result = str_replace ('----END ENCRYPTED DATA----', '', $result);
    $result = mc_decrypt (getKey(), $result);              
    $response->write($result);  

    return $response;
}

Function Grouper1($request, $response, $args) {  
    $special_cmg_list = '';
    $nosep = $request->getParsedBody()['nosep'];
    $json = '{
   "metadata":{
      "method":"grouper",
      "stage":"1"
   },
   "data":{
      "nomor_sep":"'.$nosep.'"
   }
}'; 
  
  
    $json = mc_encrypt ($json, getKey());
    $ch = curl_init(getUrlWS());

    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($ch);
    curl_close($ch);

    $hasil = substr ($result, 29, strlen ($result));
    $hasil = substr ($hasil, 0,-28);
    $resultDec = mc_decrypt (getKey(), $hasil);
    $result = $resultDec;
  

    $decode = json_decode($result, true);
    //print_r($decode);
    if (!array_key_exists('special_cmg_option', $decode)){
        $status = array('special_cmg'=>'false');      
    }else{
        $status = array('special_cmg'=>'true');
    }
  
    if (!array_key_exists('sub_acute', $decode)){
        $status1 = array('sub_acute'=>'false');      
    }else{
        $status1 = array('sub_acute'=>'true');
    }
  
    if (!array_key_exists('chronic', $decode)){
        $status2 = array('chronic'=>'false');      
    }else{
        $status2 = array('chronic'=>'true');
    }
  
    $arr1 = array_merge ($status1, $status2);
    $arr2 = array_merge($arr1, $status);
    $data = json_decode ($result, true);
    $result = array_merge($data, $arr2);
    $response->write(json_encode($result));

    return $response;  
}

Function Grouper2($request, $response, $args) {      
    $nosep = $request->getParsedBody()['nosep'];
    $Specialcmg = $request->getParsedBody()['special_cmg'];
  
    $json = '{
   "metadata":{
      "method":"grouper",
      "stage":"2"
   },
   "data":{
      "nomor_sep":"'.$nosep.'",
      "special_cmg":"'.$Specialcmg.'"
   }}';
 
  
       $json = mc_encrypt ($json, getKey());
    $ch = curl_init(getUrlWS());

  

    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $result = curl_exec($ch);
    curl_close($ch);
    $result = str_replace ('----BEGIN ENCRYPTED DATA----', '', $result);
    $result = str_replace ('----END ENCRYPTED DATA----', '', $result);
    $result = mc_decrypt (getKey(), $result);              
    $response->write($result);  
    return $response;
}

Function FinalKlaim($request, $response, $args) {  
    $nosep = $request->getParsedBody()['nosep'];
    $coder_nik= $request->getParsedBody()['coder_nik'];
  
    $json = '{
   "metadata":{
      "method":"claim_final"
   },
   "data":{
      "nomor_sep":"'.$nosep.'",
      "coder_nik":"'.$coder_nik.'"
   }
}';
    $json = mc_encrypt ($json, getKey());
    $ch = curl_init(getUrlWS());
  

    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $result = curl_exec($ch);
    curl_close($ch);  

    //$result = str_replace ('----BEGIN ENCRYPTED DATA----', '', $result);
    //$result = str_replace ('----END ENCRYPTED DATA----', '', $result);
    //$result = mc_decrypt (getKey(), $result);              
   // $response->write($result);  
  


   $json = '{
     "metadata": {
      "method":"send_claim_individual"
     },
     "data": {
     "nomor_sep":"'.$nosep.'"
     }
    }';


    $json = mc_encrypt ($json, getKey());
    $ch = curl_init(getUrlWS());
  

    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $result = curl_exec($ch);
    curl_close($ch);
    $result = str_replace ('----BEGIN ENCRYPTED DATA----', '', $result);
    $result = str_replace ('----END ENCRYPTED DATA----', '', $result);
    $result = mc_decrypt (getKey(), $result);              
    $response->write($result);  

    $sql = "Update DetailBridgingBPJS set KirimPusatData = 1 where NoSJP = '".$nosep."'";
    $db = getConnectionSQL();
    $stmt=$db->prepare($sql);
    $stmt->execute();
    echo $sql;
    return $response;  


  
  
}

Function KirimOnline($request, $response, $args) {  
    $nosep = $request->getParsedBody()['nosep'];

$json = '{
 "metadata": {
 "method":"send_claim_individual"
 },
 "data": {
 "nomor_sep":"'.$nosep.'"
 }
}';


    $json = mc_encrypt ($json, getKey());
    $ch = curl_init(getUrlWS());
 

    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $result = curl_exec($ch);
    curl_close($ch);
    $result = str_replace ('----BEGIN ENCRYPTED DATA----', '', $result);
    $result = str_replace ('----END ENCRYPTED DATA----', '', $result);
    $result = mc_decrypt (getKey(), $result);              
    $response->write($result);  
    return $response;  
}






Function EditFinal($request, $response, $args) {  
    $nosep = $request->getParsedBody()['nosep'];  
  
    $json = '{
            "metadata": {
            "method":"reedit_claim"
            },
            "data": {
            "nomor_sep":"' .$nosep.'"
            }
        }';
      
 
  
    $json = mc_encrypt ($json, getKey());
    $ch = curl_init(getUrlWS());
  

    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $result = curl_exec($ch);
    curl_close($ch);
    $result = str_replace ('----BEGIN ENCRYPTED DATA----', '', $result);
    $result = str_replace ('----END ENCRYPTED DATA----', '', $result);
    $result = mc_decrypt (getKey(), $result);              
    $response->write($result);  
}

Function AmbilDataKlaim($request, $response, $args) {  


    $json = '{
 "metadata": {
 "method":"pull_claim"
 },
 "data": {
 "start_dt":"'.$request->getParsedBody()['stat_dt'].'",
 "stop_dt":"'.$request->getParsedBody()['stop_dt'].'",
 "jenis_rawat":"'.$request->getParsedBody()['jenis'].'"
 }
}';
  
    $json = mc_encrypt ($json, getKey());

    $ch = curl_init(getUrlWS());  
  

    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $result = curl_exec($ch);
    curl_close($ch);


    if ($request->getParsedBody()['krip'] == 'true') {
    $result = str_replace ('----BEGIN ENCRYPTED DATA----', '', $result);
    $result = str_replace ('----END ENCRYPTED DATA----', '', $result);
    $result = mc_decrypt (getKey(), $result);              
    $response->write($result);  
    }else{$response->write($result);}
    return $response;  
}



function mc_encrypt($data, $key) {
$key = hex2bin($key);
if (mb_strlen($key, "8bit") !== 32) {
throw new Exception("Needs a 256-bit key!");

}
$iv_size = openssl_cipher_iv_length("aes-256-cbc");

$iv = openssl_random_pseudo_bytes($iv_size);
$encrypted = openssl_encrypt($data,"aes-256-cbc",$key,OPENSSL_RAW_DATA,$iv );

$signature = mb_substr(hash_hmac("sha256",$encrypted,$key,true),0,10,"8bit");
$encoded = chunk_split(base64_encode($signature.$iv.$encrypted));
return $encoded;
}

function mc_decrypt($strkey, $str) {
$key = hex2bin($strkey);

///    check key length, must be 256 bit or 32 bytes
if (mb_strlen($key, "8bit") !== 32) {
throw new Exception("Needs a 256-bit key!");
}


$iv_size = openssl_cipher_iv_length("aes-256-cbc");
$decoded = base64_decode($str);
$signature = mb_substr($decoded,0,10,"8bit");
$iv = mb_substr($decoded,10,$iv_size,"8bit");
$encrypted = mb_substr($decoded,$iv_size+10,NULL,"8bit");
$calc_signature = mb_substr(hash_hmac("sha256",$encrypted,$key,true),0,10,"8bit");
if(!mc_compare($signature,$calc_signature)) {
return "SIGNATURE_NOT_MATCH"; /// signature doesn't match
}

$decrypted = openssl_decrypt($encrypted,"aes-256-cbc",$key,OPENSSL_RAW_DATA,$iv);
return $decrypted;
}

///    Compare Function
function mc_compare($a, $b) {

///    compare individually to prevent timing attacks

///    compare length

if (strlen($a) !== strlen($b)) return false;

///    compare individual
$result = 0;

for($i = 0; $i < strlen($a); $i ++) { $result |= ord($a[$i]) ^ ord($b[$i]);
}

return $result == 0;
}

function Cari_Special_Prosthesis($array, $field, $value)
{
   foreach($array as $key => $array)
   {
      if ( $array[$field] === $value )
         return $key;
   }
   return false;
}

?>

Setelah semua kamu kopi paste ke Index.php. Berarti bridging kamu sudah jadi. untuk menggunakannya kamu tinggal panggil dari Advanced Rest Client.
Cara manggilnya seperti ini:

Method : BuatKlaimBaru
Url: http://localhost/BridgingINACBG/BuatKlaimBaru
Post Header: Content-Type:application/x-www-form-urlencoded
Body Post: nokartu=xxxxxxxxxx&nosep=xxxxxxxxxx&norm=xxxxxx&namapasien=xxxxxx&tgllahir=yyyy/MM/dd&jeniskelamin=1

Nanti Responsenya seperti ini:
{ "metadata": { "code": 200, "message": "Ok" }, "response": { "patient_id": 453, "admission_id": 1, "hospital_admission_id": 678 } }


Sekian dahulu tehnik Bridging INACBG-SIMRS dengan Visual Basic 6 dan PHP. Sebenarnya ini hanya prototype karena masih beberapa service saja yang aku buat. Untuk service lainnya bisa kalian teruskan sendiri. Karena aku juga belum sempat buat. Selamat Koding. Semoga sample source ini bermanfaat buat teman-teman.

Kalau butuh file yang sudah jadi japri saja. Jangan lupa kasih nama dan dari Rumah Sakit mana.

Ada yang kelupaan, Untuk Web Service yang sudah jadi bisa download disini
https://drive.google.com/file/d/0B1NbkNRwjYEya19YcFd5RmQzMk0/view?usp=sharing


Web Service Penghubung INACBG


LANJUT PART 2 Mengakses Web Service Jembatan











Lomba Blog Ultah Gandjel Rel ke 2
Lomba blog Ultah Gadjelrel ke - 2 

Siapa yang nggak kenal dengan tempe mendoan. Semua daerah di jawa tengah pasti mengenal tempe mendoan. Meski ada di hampir semua daerah, daerah yang paling terkenal dengan tempe mendoannya biasanya Purwokerto dan Tegal. Asal usul tempe mendoan sendiri masih kurang jelas. Hal ini disebabkan kurangnya literatur sejarah tentang tempe mendoan. Ada yang bilang tempe mendoan asalnya dari Purwokerto, ada juga yang bilang dari Kebumen, ada yang bilang dari Tegal, ada juga yang bilang nggak tahu. Terus dari mana asalnya tempe mendoan? mungkinkah ada alien yang datang kemudian menebar kertas resep tempe mendoan dibungkus daun lontar kemudian disebarkanlah keseluruh Jawa Tengah? 

Cara masaknya tempe mendoan sangat mudah. Hal ini terbukti dengan cepatnya tukang gorengan membuat tempe mendoan :P. Pertama tempenya di iris tipis-tipis. Tapi jangan terlalu tipis, takut kalau nanti jarimu teriris. 
Kemudian baluri tempe dengan adonan tepung yang sudah diberi bumbu. Jangan lupa kasih bumbu special, bumbu cinta, Biarkan bersemi sehingga rasanya jadi tambah gimana gitu (bun bun, buatin mendoan donk :P). Setelah itu digoreng di minyak panas.
Ingat ya! Minyaknya harus panas, kalau nggak panas ntar nggak matang sempurna. Jangan lupa juga minyaknya yang banyak, jadi semua badan tempe plus tepungnya harus terendam, karena kalau minyaknya tidak banyak, ditakutkan tempenya masuk angin (Garing loe, Biarin hahaha).

Setahuku tempe mendoan ini punya kekhasan didaerah masing-masing. Misalnya di Kebumen dan Purwokerto. Tempenya tipis-tipis. Aku nggak tahu jurus apa yang mereka pakai untuk memotong tempe, sehingga tempenya menjadi tipis dan lebar. Setahuku juga orang yang lebar pasti besar. Aku adalah contoh nyatanya (????).
Sedangikan didaerahku (Semarang) tempenya agak tebal. Mungkin di resep aslinya cuma tertulis iris tipis-tipis. Tidak disebutkan secara rinci tipisnya berapa mili, padahal persepsi orang tentang yang "tipis-tipis" itu berbeda-beda. Sehingga yang terjadi ketidak sesuaian ukuran tempe antar daerah.

tempe mendoan
Tempe Mendoan



Tempe mendoan didaerah Purwokerto cenderung basah kuyup kayak berendam minyak seminggu, sedangkan di tempatku cenderung garing, segaring becandaanku. Kalau di Purwokerto, Kebumen dan sekitarnya tempenya besar-besar, ditempatku ukurannya secukupnya mulut menganga. Selain yang udah disebutkan diatas,  sepertinya sama saja. Bentuknya kotak, ada daun bawangnya, digoreng di wajan, dan lain sebagainya.

Hal berbeda lainnya adalah panggilan. Aku sendiri lebih suka menyebut mendoan saja. Tanpa kata tempe. Dan setahuku pelanggan gorengan ditempatku pun berbuat seperti itu.
Alasan pertama karena lebih simple, dan alasan kedua karena mendoan sudah identik dengan tempe. tanpa saya sebut tempe-pun bapaknya sudah tahu kalau saya mau beli tempe mendoan. Didaerah lain ada yang mengenal tempe mendoan sebagai tempe kemul. Padahal tepung sama selimut itu bedanya jauh banget.

Ada yang kelupaan nih. Sudah baca judul diatas kan? Sekarang mulai ke cerita yang kedua. ceritaku kali ini adalah tentang aku dan handphone baruku.

Nah loh, apa hubungannya handphone baru sama mendoan?

Ya ada donk (Pakai Tanda Seru). Soalnya photo ini aku ambil pakai Hape baruku. Setelah hape lama diniatkan untuk pensiun dini karena nggak suport 4G. 

Singkat cerita aku nyari handphone yang fitur kameranya bagus tapi harga ramah dikantong, syukur-syukur hapenya bisa bikin aku rajin selfie. Soalnya selama ini selalu pakai kamera prosummer, masak mau selphi pakai kamera prosummer. Coba kalau ada yang bisa selfie pakai kamera prosummur aku kasih cemban (bercanda om, asli! jangan ditanggepin ya).

Kebetulan ada teman yang punya Asus Zenfone 2, dia bilang nih hape kameranya keren, bisa bikin blur dengan sekali kedipan. Waktu denger sih aku cuma nyengir aja. Mana mungkin hape yang kamera dan sensornya cuma seupil bisa ngalahin kamera prosummer punyaku yang segede gaban. Apalagi dia cuma nunjukin aja. Mending-mending kalau kasih hapenya barang seminggu buat ngetest. Habis di pinjemin trus dia bilang, "Udah tin kamu pakai hapeku aja". Mendengar itu mataku langsung berbinar-binar kayak komik-komik jepang. 

Kalau ingat Asus aku jadi ingat motherboard. Motherboard Asus itu sesuatu banget. Aku suka dengan teknologinya yang original. Selain itu bundlingnya juga mewah. Biasanya Asus menyertakan software-software buatannya yang sangat powerfull dan original. Jadi merasa ekslusif gitu. Sama juga dengan hapenya. Aku percaya kalau Asus pasti punya kelebihan di software atau hardwarenya yang didesain khusus sama dia. Benar juga, dari tampilannya aja dia beda dengan yang lain. Belum lagi aplikasi-aplikasi bawaan yang sudah di repalce dengan aplikasi bikinan Asus. Mantab nian, 

Setelah pilah-pilih. Akhirnya jadilah aku membeli hanphone Asus Zenfone Go ZB500KL di sebuah pameran di kota Semarang. Tadinya aku mau bikin artikel sendiri buat bahas kecanggihan kamera handphone Asus ini. Tapi karena sebab dan lain hal (kebanyakan koding jadi lupa diri) akhirnya ditulis disini saja ya, mumpung lagi lomba juga :P. Berikut ini beberapa kenapa aku suka sekali dengan handphone ini.

Harga Bersaing

Orang bilang harga tidak pernah bohong. Sama juga dengan Hape. Khususon ASUS aku merasa harganya sesuai banget dengan kualitas alias nggak overprice kayak handphone sebelah.

Kamera 13 Mp

Ini point yang paling penting buatku. Dan ini juga yang bakal dibahas agak panjang. Sudah pernah dengan ASUS Pixel Master Camera. Pixel Master Camera adalah teknologi yang dikembangkan ASUS untuk memaksimalkan hardware dan software di handphone Zenfone.

Detail keunggulan kameranya bakal aku jembrengin dibawah ini.

Image Stabilizer

Pixel Master Camera mengintegrasikan teknologi image stabilizer untuk memastikan hasil photo bebas goyang. Algoritma Pixel Master Camera yang canggih secara otomatis membandingkan titik acuan dalam serangkaian gambar untuk mendeteksi gemetar. Bila perlu gambar atau video akan di stabilkan dengan metode smartly shifting frame.


Pemrotetan Kondisi Minim Cahaya

Pixel Master Camera mengkombinasikan ukuran pixel dengan algoritma canggih pengolahan gambar dari Pixel Master Camera. Hasilnya kepekaan cahaya akan meningkat 400% dan meningkatkan kontras hingga 200%


5 elemen lensa optik terbaik

Teknologi terbaru dari Asus ini menggabungkan 5 lensa optik brighness yang meningkatkan kinerja optik, menjadikan tangkapan detail dan warna pada obyek lebih detail dan tanpa blur.

5 Element lensa Asus Zenfone
5 Element lensa ASUS Zenfone 

Apeture f/2.0


Apeture artinya bukaan lensa. Semakin rendah nilai apeturenya semakin besar bukaan lensanya, itu berarti semakin banyak cahaya yang masuk ke lensa. Ini juga yang membuat kamera prosummerku klepek-klepek. Kamera prosummer dan kamera pocket aperture terendahnya biasanya cuma f/3.1. Sedangkan kamera Asus Zenfone Go apeturenya f/2.0. Dari nilai apeturenya sudah kelihatan siapa pemenangnya.

Apeture (Bukaan lensa)

Manual Mode yang lengkap


Ini fitur yang paling aku suka. Secara dulu beli kamera prosummer karena pengen belajar setting manual. Pas sudah beli ternyata bodynya agak gede. Kemana-mana harus bawa tas. Udah kacamataan, tentang tenteng kamera. Persis kayak tukang wartawan. Padahal sebenarnya aku kan tukang ketik. Sungguh tidak praktis dan agak nggak enak juga kalau mau motret harus bongkar-bongkar tas.
Dengan fitur manual yang super lengkap (bahkan lebih lengkap dari kamera prosumerku). 
Banyak yang bisa kamu seting di manual mode. Mulai dari White Balance, EV, ISO, Shutter Speed, sampai fokusnya pun bisa disetting. Mau bikin Photo bokeh udah nggak ribet lagi. Mau membuat photo yang terang di kegelapan? ada modenya sih, tapi aku lebih suka pakai manual :).

Berkat Zenfone, aku udah nggak perlu petantang petenteng kamera lagi. Cukup pakai Zenfone aja, lompat sana "ceklik", lompat sini "ceklik", naikin hape keatas, senyum simpul "ceklik".
Mode Manual Asus Zenfone Go
Mode Manual ASUS Zenfone


Bisa dilihat dari gambar diatas, hampir semua aspek bisa dioprek. Ajib banget kan pren.

Mode Pemrotetan yang lengkap. 

Handphone punyaku masih kategory entry level. Jadi menu mode pemotretannya tak semewah Zenfone premium (Menunya lebih banyak Asus Zenfone 2). Tapi menurutku sudah sangat lengkap dan berguna kalau lagi malas setting manual. Mode pemotretan di kameraku ada mode Otomatis, HDR, Panorama, Manual, Pengindahan (biar wajah lebih cakep), cahaya redup, selfie, efek maupun waktu berlalu.
Mode Pemotetran Asus Zenfone Go
Mode scheme ASUS Zenfone Go


ASUS Pixel Master Camera

Ini nih teknology unik dari Asus yang menggabungkan software, hardware dan desain lensa untuk mendapatkan hasil gambar yang keren banget. Dengan teknologi Pixel Master Camera Zenfone ku bisa menghasilkan gambar yang berkualitas dalam kondisi apapun. Semua yang dijelaskan diatas adalah teknologi ASUS Pixel Master Camera.

Waduh kok malah bahas kamera handphone. Gak apa-apa ya pemirsa, Bukan maksud beriklan, tetapi memang ASUS Zenfone ini diluar ekspektasiku. Seperti yang aku bilang sebelumnya "Mana mungkin kamera Handphone mengalahkan kamera". dari segi sensor, prosesor dan hardwarenya pasti kalah besar. Tapi ternyata Asus memang gahar.

Ps. Tapi jangan bandingin Asus dengan kamera DSLR ya, aku belum punya kamera DSLR jadi nggak bisa mbandingin.


Bonus pic nih, pic ini bukan mendoan ya :P.

Bisa ngeblur, padahal pakai mode auto
Bisa ngeblur, padahal pakai mode auto :)



Artikel ini diikutsertakan pada Blogging Competition Jepret Kuliner Nusantara dengan Smartphone yang diselenggarakan oleh Gandjel Rel.