ssecd / jkn

JKN (BPJS) Bridging API Client untuk NodeJS
https://www.npmjs.com/package/@ssecd/jkn
MIT License
13 stars 11 forks source link
antrean-bpjs bpjs bpjs-bridging jkn mobile-jkn nodejs vclaim vclaim-encrypted vclaim-rest

JKN (BPJS) Bridging API untuk NodeJS

Mudahnya JKN API dari SSEC

Fitur

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