Integrasi BPJS PCare, Antrean FKTP, VClaim, dan iCare dengan dukungan Redis Cache, Logging, dan Modular Service Architecture.
Repository resmi: NewusTech/bpjs-bridge
npm i bpjs-bridgeimport { PcareService } from "@newustechnology/bpjs-bridging";
const pcare = new PcareService({
consId: "...",
secretKey: "...",
userKey: "...",
username: "...",
password: "..."
},redist);
const dokter = await pcare.dokter.get(0, 10);
console.log(dokter);
- β‘ Redis Caching untuk mempercepat response BPJS
- π Request signing otomatis (X-Signature, Authorization, Timestamp)
- π§© Arsitektur service modular (PcareService, FktpService, AntrolService)
- π Auto-retry request & error handling kuat
- π§΅ Prefix Redis per fasilitas kesehatan
- π§Ό Pattern deletion & flush cache
- π¦ Endpoints BPJS terstruktur via config JSON
- π Support transaksi BPJS GET/POST/PUT/DELETE
Dokumentasi ini menjelaskan cara kerja sistem caching Redis yang diimplementasikan pada class FktpService. Tujuannya adalah mempercepat respons API BPJS, mengurangi beban request berulang, serta meningkatkan performa aplikasi.
Class FktpService berfungsi sebagai service utama untuk memanggil endpoint BPJS (PCare, Antrean, VClaim, iCare) dengan fitur tambahan berupa:
- Redis caching
- Prefix key dinamis per fasyankes/puskesmas
- Otomatis menyimpan dan mengambil cache berdasarkan parameter API
- TTL (kadaluarsa cache) otomatis
- Penghapusan berdasarkan pola (pattern deletion)
- Flush semua cache
constructor(config, redisClient, chachePrefix) {
this.client = createBpjsClient(config);
if (redisClient) {
this.redisClient = redisClient;
this.redisClient.on("connect", () => console.info("Redis connected"));
this.redisClient.on("error", err => console.error("Redis error:", err));
if (chachePrefix) {
this.defaultRedisKeyPrefix =
this.defaultRedisKeyPrefix + "_" + chachePrefix + ":";
}
}
}Fitur ini memungkinkan:
- Menggunakan Redis secara opsional
- Menghasilkan prefix unik untuk setiap instansi faskes
- Mempermudah isolasi cache antar puskesmas
private async set(key, value, expInSecond = 3600)- Menerima key dan value
- Mengubah value menjadi JSON string
- Menyimpan ke Redis dengan TTL default 3600 detik (1 jam)
Flow:
- Serialize β JSON.stringify
- Redis SET key with EXPIRE
private async get(key)Fungsi:
- Mencari key di Redis
- Mengembalikan string JSON atau
nulljika tidak ada - Logging otomatis jika cache ditemukan
Jika data ditemukan:
- System tidak memanggil API BPJS
- Mengembalikan data sebagai fake AxiosResponse
private async del(key)Menghapus satu cache berdasarkan key lengkap.
private async deleteKeysByPattern(pattern)Contoh:
- Menghapus semua cache endpoint PCare:
deleteKeysByPattern("pcare_*")
Fitur ini sangat berguna ketika:
- Fasyankes update mapping
- Data referensi berubah
- Harus invalidasi cache massal
private async flushAll()Membersihkan seluruh isi Redis.
const cacheKey = `${name}:${JSON.stringify(params)}`;const cachedData = await this.get(cacheKey);Jika ada β langsung return:
return {
data: parsed,
status: 200,
statusText: "OK",
headers: {},
config: client.defaults,
};Tanpa memanggil API BPJS!
const res = await this.client({ url: endpoint, method: "GET" });await this.set(cacheKey, res.data);| Fitur | Manfaat |
|---|---|
| Redis TTL | Otomatis invalidasi cache usang |
| Prefix per puskesmas | Cache tidak saling tercampur |
| Fake AxiosResponse | Kompatibel dengan semua service yang expect Axios |
| Pattern deletion | Mudah invalidasi cache masal |
| Response lebih cepat | Hemat request ke BPJS |
bpjs_bridge_fktp_puskesmasA:pcare_diagnosa:{"kode":"A00"}
bpjs_bridge_fktp_puskesmasA:pcare_obat:{"kdObat":"40102"}
bpjs_bridge_fktp_puskesmasB:vclaim_peserta:{"nokartu":"000123"}
Prefix β per instansi
Suffix β berdasarkan endpoint + parameter
const res = await fktpService.callEndpoint("pcare_diagnosa", { kode: "A00" });Jika sudah pernah dipanggil β langsung ambil dari Redis.
- Cache hanya berjalan untuk request GET, sesuai pola:
if (method === "GET") save to Redis
- Untuk POST/PUT/DELETE β tidak disimpan agar tidak membuat konflik data.
- TTL default bisa diganti sesuai kebutuhan.
Dokumentasi ini menjelaskan seluruh mekanisme internal caching Redis yang digunakan pada sistem BPJS Bridge.
Implementasi ini membuat aplikasi lebih cepat, efisien, dan hemat pemanggilan API.
π§βπ» Kontributor
Terima kasih kepada semua kontributor yang telah membantu pengembangan project ini π
π Lisensi
β€οΈ Dukungan
Jika project ini bermanfaat, jangan lupa:
β Star repository π΄ Fork bila ingin modifikasi π Open issue untuk bug/fitur baru