Memuat...
👋 Selamat Pagi!

Cara Membangun Sistem Integrasi BPJS untuk Klinik Modern

Pelajari cara membangun sistem integrasi BPJS yang aman dan efisien untuk klinik modern. Panduan lengkap dari VClaim hingga Apotek untuk developer Indonesia.

Cara Membangun Sistem Integrasi BPJS untuk Klinik Modern

Integrasi BPJS menjadi kebutuhan wajib bagi setiap klinik dan rumah sakit di Indonesia yang melayani pasien peserta Jaminan Kesehatan Nasional.

Sistem ini memungkinkan proses pelayanan berjalan lebih cepat karena data peserta dapat diverifikasi secara real time tanpa perlu input manual.

Namun membangun sistem bridging BPJS tidak semudah membalikkan telapak tangan karena melibatkan banyak endpoint dan aturan keamanan yang ketat.

Artikel ini akan membahas langkah lengkap membangun sistem integrasi BPJS dari nol hingga siap digunakan di lingkungan production.

Mengapa Integrasi BPJS Sangat Penting untuk Klinik

Sejak diterapkannya sistem rujukan berjenjang, klinik wajib terhubung dengan sistem BPJS untuk dapat melakukan pelayanan kepada pasien peserta JKN.

Tanpa integrasi, petugas administrasi harus membuka portal BPJS secara terpisah untuk setiap pasien yang datang.

Proses ini memakan waktu dan berpotensi menimbulkan kesalahan input data yang bisa berakibat fatal pada klaim.

Dengan sistem terintegrasi, seluruh proses dari pemeriksaan eligibilitas hingga pengajuan klaim dapat dilakukan dari satu dashboard.

Klinik juga dapat mengurangi risiko penolakan klaim karena data yang dikirim sudah sesuai dengan format yang ditentukan BPJS.

Komponen Utama Sistem Bridging BPJS

BPJS menyediakan beberapa layanan API yang masing-masing memiliki fungsi berbeda dalam ekosistem pelayanan kesehatan.

Memahami setiap komponen ini sangat penting sebelum mulai membangun sistem integrasi.

VClaim untuk Klaim Rawat Jalan dan Inap

VClaim adalah API utama yang digunakan untuk mengelola klaim pelayanan rawat jalan maupun rawat inap.

Endpoint ini mencakup fitur referensi seperti diagnosa, tindakan, fasilitas kesehatan, hingga data peserta.

VClaim juga menyediakan fitur pembuatan rujukan, SEP, dan monitoring status klaim yang sangat dibutuhkan operasional klinik.

Aplicare untuk Manajemen Tempat Tidur

Aplicare digunakan oleh fasilitas kesehatan tingkat lanjutan untuk mengelola ketersediaan tempat tidur rawat inap.

Sistem ini memudahkan BPJS dan faskes rujukan untuk melihat ketersediaan bed real time.

Bagi klinik dengan layanan rawat inap, integrasi Aplicare menjadi syarat mutlak untuk keberlangsungan operasional.

Mobile JKN untuk Antrean Online

Mobile JKN atau Antrean FK adalah layanan yang memungkinkan pasien mengantri secara online melalui aplikasi Mobile JKN.

Integrasi dengan sistem ini membuat klinik dapat menerima pasien yang sudah memiliki nomor antrean dari aplikasi BPJS.

Data antrean akan otomatis masuk ke sistem klinik tanpa perlu input ulang oleh petugas loket.

e-Recipe untuk Resep Elektronik

e-Recipe adalah layanan yang memungkinkan pengiriman resep elektronik ke farmasi yang bekerja sama dengan BPJS.

Sistem ini menghilangkan kebutuhan resep fisik dan mempercepat proses pengambilan obat di apotek.

Persiapan Sebelum Mulai Integrasi

Ada beberapa persyaratan yang harus dipenuhi sebelum klinik dapat mengakses API BPJS.

Pertama, klinik harus sudah terdaftar sebagai fasilitan kesehatan tingkat pertama yang bekerja sama dengan BPJS.

Kedua, klinik memerlukan credential berupa consumer ID dan consumer secret yang diberikan oleh BPJS.

Credential ini digunakan untuk menghasilkan token autentikasi yang wajib disertakan pada setiap request ke API.

Ketiga, klinik harus menyediakan server dengan IP publik yang dapat diakses oleh sistem BPJS.

BPJS menerapkan sistem whitelist IP untuk keamanan sehingga hanya IP terdaftar yang dapat mengakses API mereka.

Arsitektur Sistem Integrasi BPJS

Arsitektur yang baik memisahkan antara sistem internal klinik dengan layer komunikasi ke BPJS.

Pendekatan ini memudahkan maintenance dan debugging ketika terjadi masalah pada sisi integrasi.

API Gateway sebagai Pintu Komunikasi

API gateway berfungsi sebagai perantara antara aplikasi klinik dengan endpoint BPJS.

Semua request dari aplikasi akan melewati gateway yang kemudian meneruskan ke API BPJS dengan format yang sesuai.

Gateway juga dapat menyimpan cache untuk data referensi yang jarang berubah seperti daftar diagnosa dan tindakan.

Database untuk Menyimpan Log

Setiap request dan response harus dicatat dalam database untuk keperluan audit dan troubleshooting.

Log ini sangat berguna ketika ada dispute dengan BPJS terkait klaim yang ditolak atau data yang tidak sesuai.

Simpan minimal timestamp, endpoint yang diakses, request body, response body, dan status code.

Background Worker untuk Sinkronisasi

Beberapa proses seperti sinkronisasi data referensi sebaiknya dijalankan di background.

Background worker dapat dijadwalkan untuk mengambil update data diagnosa, tindakan, dan referensi lainnya setiap hari.

Pendekatan ini menghindari beban berlebih pada sistem saat jam sibuk pelayanan pasien.

Implementasi Autentikasi OAuth 2.0

BPJS menggunakan standar OAuth 2.0 untuk mengamankan komunikasi antar sistem.

Proses autentikasi menghasilkan access token yang memiliki masa berlaku tertentu sebelum harus diperbarui.

Berikut adalah contoh kode untuk mendapatkan token dari API BPJS.

function getBPJSToken($consumerId, $consumerSecret) {
    $url = 'https://apijkn.bpjs-kesehatan.go.id/vclaim-rest/oauth/token';
    
    $credentials = base64_encode($consumerId . ':' . $consumerSecret);
    
    $headers = [
        'Authorization: Basic ' . $credentials,
        'Content-Type: application/x-www-form-urlencoded'
    ];
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, 'grant_type=client_credentials');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    $result = json_decode($response, true);
    return $result['access_token'];
}

Token yang dihasilkan biasanya berlaku selama 60 menit sebelum harus request ulang.

Implementasi caching token sangat disarankan untuk mengurangi beban request autentikasi yang tidak perlu.

Verifikasi Eligibilitas Peserta

Langkah pertama dalam pelayanan adalah memverifikasi apakah pasien masih aktif sebagai peserta BPJS.

Proses ini dilakukan dengan mengirimkan nomor kartu atau NIK ke endpoint peserta.

Response akan berisi status kepesertaan, tanggal lahir, jenis kelamin, dan kelas rawat yang berhak didapatkan.

function cekEligibilitas($nomorKartu, $token) {
    $url = 'https://apijkn.bpjs-kesehatan.go.id/vclaim-rest/Peserta/nokartu/' . $nomorKartu . '/tglSEP/' . date('Y-m-d');
    
    $headers = [
        'Authorization: Bearer ' . $token,
        'X-cons-id: ' . CONSUMER_ID,
        'X-timestamp: ' . time(),
        'X-signature: ' . generateSignature()
    ];
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    return json_decode($response, true);
}

Pastikan untuk mengecek field status kepesertaan sebelum melanjutkan ke proses pelayanan.

Pasien dengan status non-aktif tidak dapat dilayani menggunakan jaminan BPJS.

Membuat Rujukan dan SEP

Surat Eligibilitas Peserta atau SEP adalah dokumen wajib untuk setiap pelayanan yang diklaim ke BPJS.

SEP dapat dibuat setelah pasien diverifikasi eligibilitasnya dan mendapatkan rujukan jika diperlukan.

Berikut adalah contoh request untuk membuat SEP rawat jalan.

function createSEP($data, $token) {
    $url = 'https://apijkn.bpjs-kesehatan.go.id/vclaim-rest/SEP/2.0/insert';
    
    $body = [
        'request' => [
            't_sep' => [
                'noKartu' => $data['noKartu'],
                'tglSep' => $data['tanggal'],
                'ppkPelayanan' => KODE_FASKES,
                'jnsPelayanan' => '2', // Rawat Jalan
                'klsRawat' => [
                    'klsRawatHak' => $data['kelas'],
                    'klsRawatNaik' => ''
                ],
                'diagAwal' => $data['diagnosa'],
                'poli' => $data['poli'],
                'rujukan' => [
                    'asalRujukan' => '1',
                    'noRujukan' => $data['noRujukan'],
                    'tglRujukan' => $data['tglRujukan'],
                    'ppkRujukan' => $data['ppkRujukan']
                ]
            ]
        ]
    ];
    
    $headers = [
        'Authorization: Bearer ' . $token,
        'Content-Type: application/json',
        'X-cons-id: ' . CONSUMER_ID,
        'X-timestamp: ' . time(),
        'X-signature: ' . generateSignature()
    ];
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($body));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    return json_decode($response, true);
}

Simpan nomor SEP yang dikembalikan karena akan digunakan sebagai referensi untuk klaim.

Nomor SEP juga harus dicantumkan pada setiap berkas klaim yang diajukan ke BPJS.

Pengajuan Klaim dan Monitoring Status

Setelah pelayanan selesai, klinik harus mengajukan klaim untuk mendapatkan pembayaran dari BPJS.

Data klaim harus dikirim sesuai dengan format yang ditentukan dengan kode diagnosa dan tindakan yang sesuai.

Kesalahan pengisian data adalah penyebab utama penolakan klaim oleh sistem BPJS.

Validasi Data Sebelum Submit

Implementasikan validasi di sisi aplikasi untuk memastikan semua field wajib terisi dengan benar.

Cek format tanggal, kode ICD-10 untuk diagnosa, dan kode tindakan sebelum mengirim ke API.

Validasi di awal akan menghemat waktu karena mengurangi kebutuhan revisi klaim.

Monitoring Status Klaim

Buat dashboard untuk memantau status klaim yang sudah diajukan ke BPJS.

Status dapat berupa pending, approved, atau rejected dengan alasan penolakan yang jelas.

Klaim yang ditolak harus segera diperbaiki dan diajukan ulang sebelum periode klaim ditutup.

Penanganan Error dan Exception

Integrasi dengan sistem eksternal selalu membawa risiko error yang harus ditangani dengan baik.

Implementasi error handling yang robust akan mencegah aplikasi crash dan memberikan informasi berguna untuk debugging.

Retry Logic untuk Network Error

Jaringan internet tidak selalu stabil sehingga request ke API BPJS bisa gagal tanpa alasan yang jelas.

Implementasikan retry logic dengan exponential backoff untuk request yang gagal karena network error.

Simpan request yang gagal ke queue untuk diproses ulang secara otomatis oleh background worker.

Logging untuk Troubleshooting

Log yang baik harus mencatat tidak hanya error tetapi juga request yang berhasil.

Dengan log lengkap, tim support dapat melacak masalah ketika ada komplain dari petugas klinik.

Gunakan structured logging dengan format JSON untuk memudahkan parsing dan analisis.

Best Practice Keamanan Sistem

Data kesehatan termasuk dalam kategori data sensitif yang harus dilindungi dengan baik.

BPJS juga menerapkan aturan keamanan yang ketat untuk melindungi data peserta dari akses tidak sah.

Enkripsi Kredensial

Jangan pernah menyimpan consumer secret atau password dalam bentuk plain text di database.

Gunakan algoritma enkripsi yang kuat dan simpan kunci enkripsi di environment variable yang tidak dapat diakses publik.

Rotate kredensial secara berkala sesuai kebijakan keamanan organisasi.

Audit Trail

Catat setiap akses ke data peserta dengan informasi user, waktu, dan jenis akses.

Audit trail ini berguna untuk investigasi jika ada dugaan penyalahgunaan data.

Simpan log audit di tempat yang terpisah dari database utama untuk keamanan.

Rate Limiting

Implementasi rate limiting di level aplikasi untuk mencegah abuse dari user internal.

Hal ini juga melindungi klinik dari potensi pemblokiran oleh BPJS karena request berlebihan.

Monitor penggunaan API dan alert jika ada anomali yang mengindikasikan masalah.

Testing Sebelum Go Live

BPJS menyediakan environment sandbox untuk testing sebelum sistem digunakan di production.

Manfaatkan sandbox secara maksimal untuk memastikan semua fungsi berjalan dengan benar.

Testing harus mencakup skenario normal maupun edge case seperti network timeout dan response error.

Uji Integrasi End-to-End

Lakukan uji integrasi lengkap dari verifikasi peserta hingga pengajuan klaim.

Libatkan tim operasional klinik untuk memastikan workflow sesuai dengan kebutuhan lapangan.

Dokumentasikan setiap issue yang ditemukan dan pastikan diperbaiki sebelum go live.

Load Testing

Simulasikan kondisi traffic tinggi untuk memastikan sistem dapat menghandle beban saat jam sibuk.

Monitor penggunaan resource server dan identifikasi bottleneck yang perlu dioptimasi.

Load testing juga membantu menentukan spesifikasi server yang tepat untuk production.

Butuh jasa pembuatan website profesional? KerjaKode menyediakan layanan pembuatan website berkualitas tinggi dengan harga terjangkau. Kunjungi jasa pembuatan website KerjaKode untuk konsultasi gratis dan wujudkan website impian Anda.

Kesimpulan

Membangun sistem integrasi BPJS memerlukan pemahaman mendalam tentang regulasi dan standar teknis yang ditetapkan.

Investasi waktu di awal untuk merancang arsitektur yang baik akan membuahkan hasil dalam jangka panjang.

Sistem yang terintegrasi dengan baik akan meningkatkan efisiensi operasional dan mengurangi risiko kesalahan klaim.

Dengan mengikuti panduan ini, klinik dapat membangun sistem bridging BPJS yang aman dan reliable untuk mendukung pelayanan pasien.

Ajie Kusumadhany
Written by

Ajie Kusumadhany

Founder & Lead Developer KerjaKode. Berpengalaman dalam pengembangan web modern dengan Laravel, React.js, Vue.js, dan teknologi terkini. Passionate tentang coding, teknologi, dan berbagi pengetahuan melalui artikel.

Promo Spesial Hari Ini!

10% DISKON

Promo berakhir dalam:

00 Jam
:
00 Menit
:
00 Detik
Klaim Promo Sekarang!

*Promo berlaku untuk order hari ini

0
User Online
Halo! 👋
Kerjakode Support Online
×

👋 Hai! Pilih layanan yang kamu butuhkan:

Chat WhatsApp Sekarang