Git Product home page Git Product logo

jkn's Introduction

JKN (BPJS) Bridging API untuk NodeJS

Mudahnya JKN API dari SSEC

Fitur

  • ✅ Aplicares
  • ✅ VClaim
  • ✅ Antrean
  • ✅ Apotek
  • ✅ i-Care
  • ✅ Rekam Medis
  • 🧩 PCare (partial)

Instalasi

Instalasi paket dapat dilakukan dengan perintah berikut:

npm install @ssecd/jkn

Untuk dukungan type pada API Rekam Medis, perlu menambahkan development dependensi @types/fhir dengan perintah:

npm install --save-dev @types/fhir

Instalasi juga dapat dilakukan menggunakan PNPM atau YARN

Penggunaan

Penggunaan paket ini sangatlah sederhana, cukup menginisialisasi global instansi pada sebuah modul atau file seperti berikut:

// file: jkn.ts atau jkn.js

import JKN from '@ssecd/jkn';

const jkn = new JKN();

export default jkn;

Secara default konfigurasi seperti cons id atau cons secret akan dibaca melalui environment variable namun konfigurasi juga dapat diatur pada constructor class JKN seperti berikut:

// file: jkn.ts atau jkn.js

import JKN from '@ssecd/jkn';

const jkn = new JKN({
	consId: '<cons id dari bpjs>'
	// dan seterusnya ...
});

export default jkn;

Selain menggunakan objek, konfigurasi juga dapat diatur menggunakan fungsi, misalnya pada kasus membaca atau mendapatkan konfigurasi dari database:

// file: jkn.ts atau jkn.js

import JKN from '@ssecd/jkn';

const jkn = new JKN(async () => {
	const result = await sql`select * from config`;
	return {
		consId: result.consId
		// dan seterusnya ...
	};
});

export default jkn;

Perlu diperhatikan bahwa fungsi pada constructor parameter tersebut hanya akan dipanggil satu kali. Bila terjadi perubahan konfigurasi harap memanggil fungsi await invalidateConfig() pada instansi JKN untuk memperbaharui atau menerapkan perubahan konfigurasi.

Kemudian cukup impor module jkn tersebut di mana pun saat akan menggunakannya:

import jkn from './path/to/jkn.js';

const result = await jkn.vclaim.referensi.faskes({
	keyword: 'silampari',
	jenis: 2
});

console.log(result);
/*
{
	response: {
		faskes: [
			{
				kode: "0089S002",
				nama: "Klinik Utama Mata Silampari Sriwijaya Eye Centre"
			}
		]
	};
	metaData: {
		code: "200";
		message: "OK";
	};
}
*/

Setiap parameter dan response objek memiliki type TypeScript dan komentar dokumentasi yang dibentuk sesuai dengan dokumentasi API BPJS Kesehatan pada TrustMark dengan demikian developer dapat membaca langsung dokumentasi cepat dari kode tanpa harus bolak-balik halaman TrustMark yang tentunya akan sangat mempersingkat proses development.

Tipe Request & Response

Pada kasus tertentu, type dari request atau response diperlukan di luar pemanggilan API method misalnya saat ingin mendefinisikan variable request pada global scope variable atau bahkan pada module berbeda dengan tetap mempertahankan keakuratan type atau menjadikan response sebagai parameter fungsi yang menyimpan response tersebut ke database, hal tersebut dapat dilakukan seperti berikut:

import type { AntreanParams, VClaimResponse } from '@ssecd/jkn';
import jkn from './path/to/jkn.js';

const jadwal: AntreanParams<'refJadwalDokter'>[0] = {
	poli: 'MAT',
	tanggal: '2023-05-01'
};

const result = await jkn.antrean.refJadwalDokter(jadwal);
console.log(result);

// ...

function persistSep(sep: VClaimResponse<'sep', 'insertV2'>) {
	/* simpan SEP ke database */
}

Konfigurasi

Konfigurasi mengikuti interface berikut:

interface Config {
	/**
	 * Kode PPK yang diberikan BPJS.
	 *
	 * Diperlukan untuk melakukan proses enkripsi
	 * pada service eRekamMedis and request pada
	 * service Aplicares
	 *
	 * @default process.env.JKN_PPK_CODE
	 */
	ppkCode: string;

	/**
	 * Cons ID dari BPJS
	 *
	 * @default process.env.JKN_CONS_ID
	 */
	consId: string;

	/**
	 * Secret key dari BPJS
	 *
	 * @default process.env.JKN_CONS_SECRET
	 */
	consSecret: string;

	/**
	 * User key Aplicares dari BPJS
	 *
	 * @default process.env.JKN_APLICARES_USER_KEY
	 */
	aplicaresUserKey: string;

	/**
	 * User key VClaim dari BPJS
	 *
	 * @default process.env.JKN_VCLAIM_USER_KEY
	 */
	vclaimUserKey: string;

	/**
	 * User key Antrean dari BPJS
	 *
	 * @default process.env.JKN_ANTREAN_USER_KEY
	 */
	antreanUserKey: string;

	/**
	 * User key Apotek dari BPJS
	 *
	 * @default process.env.JKN_APOTEK_USER_KEY
	 */
	apotekUserKey: string;

	/**
	 * User key PCare dari BPJS
	 *
	 * @default process.env.JKN_PCARE_USER_KEY
	 */
	pcareUserKey: string;

	/**
	 * User key i-Care dari BPJS
	 *
	 * Umumnya user key i-Care ini nilai sama dengan user key VClaim
	 * untuk FKRTL dan PCare untuk FKTP
	 *
	 * @default process.env.JKN_ICARE_USER_KEY
	 */
	icareUserKey: string;

	/**
	 * User key eRekam Medis dari BPJS
	 *
	 * @default process.env.JKN_REKAM_MEDIS_USER_KEY
	 */
	rekamMedisUserKey: string;

	/**
	 * Berupa mode "development" dan "production". Secara default akan
	 * membaca nilai environment variable NODE_ENV atau "development"
	 * jika NODE_ENV tidak terdapat nilai. Mode ini berpengaruh pada
	 * nilai konfigurasi yang digunakan dan JKN API base url.
	 *
	 * @default process.env.NODE_ENV || "development"
	 */
	mode: 'development' | 'production';

	/**
	 * Secara default bernilai `false` sehingga setiap terjadi kesalahan
	 * saat mengirim permintaan ke server JKN menggunakan method `send()`,
	 * pesan kesalahan akan dikembalikan sebagai pesan response dan log
	 * error akan dicetak pada konsol atau terminal. Jika bernilai true,
	 * maka kesalahan akan di-throw.
	 *
	 * @default false
	 */
	throw: boolean;

	/**
	 * Base URL web service dari BPJS. Secara default sudah diatur
	 * berdasarkan base url yang ada di TrustMark. Nilai dapat diatur
	 * secara partial, misalnya:
	 *
	 * ```
	 * baseUrls: {
	 * 	vclaim: {
	 * 		development: 'http://dev.example.com',
	 * 		production: 'http://prod.example.com'
	 * 	}
	 * }
	 * ```
	 */
	baseUrls: Partial<Record<Type, Record<Mode, string>>>;
}

Kontribusi

Kontribusi sangat dipersilakan dan dapat dilakukan dengan berbagai cara seperti melaporkan masalah, membuat permintaan atau menambahkan fitur melalui PR, atau sekedar memperbaiki kesalahan ketikan.

Lisensi

MIT

Lainnya

jkn's People

Contributors

github-actions[bot] avatar mustofa-id avatar ssec-dev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jkn's Issues

Debug option for Rekam Medis API

Add an option to output debug information either to the console or to a file, but only in development mode.

debug?: 'console' | 'file'

Scenario test

Misalnya skenario pembuatan SEP pada API VClaim yang dimulai dari pengecekan data Rujukan

Add services status helper

Akan sangat membantu untuk memonitoring status services seperti mengetahui lama waktu response dari setiap service

Web APIs polyfill

Module seperti fetch belum tersedia di Nodejs versi lawas. Kondisikan untuk membuat polyfill untuk memperluas dukungan versi Nodejs. Lihat ini sebagai referensi.

FAQ

Kumpulan pertanyaan dan jawaban terkait bridging baik alur maupun teknis.
Silakan merujuk ke sini.

Consent

Pengembangan library ini bertujuan untuk mempermudah developer lain dalam melakukan integrasi atau bridging aplikasi dengan web service BPJS namun pengembangan ini akan membuat web service BPJS menjadi terbuka dan dapat diakses oleh siapa pun. Sementara baik mitra fasilitas kesehatan maupun vendor pengembang aplikasi harus memiliki akun untuk dapat mengakses web service BPJS melalui platform TrustMark dan pembuatan akun tersebut memerlukan izin dari BPJS Kesehatan.

Kami telah melakukan pencarian untuk aturan khusus yang berlaku bagi pengembang library, baik di mesin pencarian maupun di situs TrustMark itu sendiri namun tidak menemukan informasi yang relevan. Kami juga telah mengajukan pertanyaan di forum yang disediakan oleh BPJS, namun sayangnya tidak ada tanggapan yang diberikan. Berikut ini adalah tangkapan layar pertanyaan yang kami sampaikan.

image

image

image

Link diskusi: https://t.me/c/1673837525/33014

Oleh karena itu, saat ini kami berasumsi bahwa tidak ada aturan khusus yang mengatur pengembangan library untuk web service BPJS ini, sehingga kami melanjutkan pengembangan library tersebut dengan sah.

Beberapa library serupa atau aplikasi:

Cache response

Beberapa endpoint yang sangat jarang terjadi perubahan datanya sebaiknya di-cache untuk mempercepat response.

Provide a way to invalidate config on cluster mode

Saat menjalankan server Node dengan mode cluster, hanya cluster yang menjalankan invalidateConfig() yang akan menerapkan perubahan konfigurasi sementara cluster lain tidak mengetahui perubahan tersebut.

Proposed solution

  • Expose boolean flag untuk menandai bahwa konfigurasi perlu diperbarui dan biarkan user menentukan nilainya.
  • Gunakan model versi konfigurasi yang dinaikan saat terjadi perubahan

Export request & response type

Pada implementasi library ini tidak terdapat type yang didefinisikan khusus untuk setiap request dan response web service, type ditulis langsung pada method-method class module. Pada kasus tertentu developer memerlukan type dari request atau response seperti:

const sep: VClaimSEPRequest = { /* ... */ }

Proposed solution

  • Definisikan type setiap API dan methods
  • Definisikan generic type setiap API yang dapat mengakses type dari method melalu nama property atau method

Remap request & response

Ada banyak sekali property pada request atau response dari web service BPJS yang tidak menggunakan standar penamaan property, case yang bercampur, tidak konsisten, dan akan memberikan spelling warning pada editor. Salah satu contohnya:

image

Property kdpoli pada tangkap layar di atas misalnya adalah property untuk kode poli yang akan di-map menjadi kodePoli atau setidaknya kdPoli.

Proposed solution

  • Remap property yang tidak standar (tentu akan menimbulkan breaking change)
  • Map property yang tidak standar tanpa menghapus property tersebut dan memberi saran pada komentar kode

Support request timeout

Saat ini, setiap request ke service JKN, reqeust akan ditunggu selamanya hingga service JKN memberi response.

Exposed config should be readonly

Property configuration yang diekpos saat ini dapat dimodifikasi langsung, misalnya:

jkn.configuration.ppkCode = 'example'

Sebaiknya dijadikan readonly property.

Migrate to Bun?

Bun telah merilis versi stabilnya. Bun sudah menjadi paket lengkap, selain runtime juga memiliki package manager, bundler yang mendukung Typescript out of the box, dan Test runner.

Implement Antrean FKTP

Web service Antrean JKN for FKTP. See docs here /trust-mark/main.html#/mitra/katalog/afktpws/wsbpjs.

Abbility to override base urls

Jika suatu saat terjadi perubahan base url dari BPJS atau user ingin menggunakan proxy server, ini akan sangat berguna.

Mobile JKN: "Gagal Terhubung ke server RS"

Pesan "Gagal Terhubung ke server RS" yang muncul di aplikasi Mobile JKN biasanya terjadi oleh beberapa sebab:

  • Web service faskes error atau crash saat Mobile JKN melakukan request.
  • Web service faskes tidak mengirim kode status sukses atau 200 pada response header (bukan response body).
    Pada standarnya, web service akan memberikan kode status pada header sesuai dengan kondisi response, misalnya saat validasi input tidak valid umumnya web service akan mengirim kode status 400 (Bad Request) atau saat data yang di-request tidak ditemukan web service akan mengirim kode status 404 (Not Found) dan seterusnya. Namun untuk web service Mobile JKN setiap response dari web service faskes harus mengirimkan kode status pada header dengan kode sukses (200) dalam kondisi apapun tanpa terkecuali namun dengan tetap menyesuaikan kode status pada body sesuai dengan spesifikasi di TrustMark, misalnya untuk response ambil antrean, kode status pada response body 200 jika berhasil, 201 jika gagal, dan 202 jika pasien baru.
  • Web service faskes tidak menggunakan SSL atau SSL sudah expired.
  • Web service faskes memberikan response terlalu lama.
    Mobile JKN membatasi lamanya waktu request selama 15 detik. Jika web service faskes tidak meresponse selama waktu yang disebut maka akan dianggap gagal terhubung.
  • IP JKN terblokir oleh server/hosting/provider web service faskes

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.