@ssecd/jkn
Version:
JKN (BPJS) Bridging API untuk NodeJS
242 lines (241 loc) • 7.49 kB
JavaScript
import { VClaimBaseApi } from './base.js';
const formPRBFieldsMap = {
// key: [codes[], min, max]
HBA1C: [['01'], 0.1, 15],
GDP: [['01', '07'], 10, 500],
GD2JPP: [['01'], 10, 500],
eGFR: [['01', '02'], 5, 150],
TD_Sistolik: [['01', '07'], 20, 200],
TD_Diastolik: [['01', '07'], 20, 200],
LDL: [['01', '07'], 20, 500],
Rata_TD_Sistolik: [['02', '04'], 20, 200],
Rata_TD_Diastolik: [['02', '04'], 20, 200],
JantungKoroner: [['02'], 0, 1],
Stroke: [['02'], 0, 1],
VaskularPerifer: [['02'], 0, 1],
Aritmia: [['02', '04'], 0, 1],
AtrialFibrilasi: [['02'], 0, 1],
NadiIstirahat: [['04'], 20, 200],
SesakNapas3Bulan: [['04'], 0, 1],
NyeriDada3Bulan: [['04'], 0, 1],
SesakNapasAktivitas: [['04'], 0, 1],
NyeriDadaAktivitas: [['04'], 0, 1],
Terkontrol: [['03'], 0, 1],
Gejala2xMinggu: [['03'], 0, 1],
BangunMalam: [['03'], 0, 1],
KeterbatasanFisik: [['03'], 0, 1],
FungsiParu: [['03'], 0, 100],
SkorMMRC: [['05'], 0, 40],
Eksaserbasi1Tahun: [['05'], 0, 1],
MampuAktivitas: [['05'], 0, 1],
Epileptik6Bulan: [['08'], 0, 1],
EfekSampingOAB: [['08'], 0, 1],
HamilMenyusui: [['08'], 0, 1],
Remisi: [['06'], 0, 100],
TerapiRumatan: [['06'], 0, 1],
Usia: [['06'], 1, 100],
AsamUrat: [['07'], 0.1, 20],
RemisiSLE: [['09'], 0, 100],
Hamil: [['09'], 0, 1]
};
export class RencanaKontrol extends VClaimBaseApi {
get listPenyakitPRB() {
return [
['01', 'Diabetes Mellitus'],
['02', 'Hipertensi'],
['03', 'Asma'],
['04', 'Penyakit Jantung'],
['05', 'PPOK'],
['06', 'Skizofrenia'],
['07', 'Stroke'],
['08', 'Epilepsi'],
['09', 'SLE']
].map(([kode, nama]) => ({ kode, nama }));
}
/**
* Mengambil semua form fields penyakit PRB yang dapat dimanfaatkan
* untuk membentuk form input penyakit PRB dengan melakukan filter
* berdasarkan `kode` dari {@link listPenyakitPRB}.
*/
get allFieldsPenyakitPRB() {
const fieldsMap = formPRBFieldsMap;
return Object.entries(fieldsMap).map(([namaField, [listKode, nilaiMinimum, nilaiMaksimum]]) => ({
namaField,
listKode,
nilaiMinimum,
nilaiMaksimum
}));
}
/**
* Mengambil semua form fields penyakit PRB berdasarkan kode
* penyakit PRB. Berguna untuk membentuk form input di sisi
* client atau UI secara dinamis berdasarkan Penyakit PRB.
*
* @param kode Kode penyakit PRB. Lihat {@link listPenyakitPRB}
*/
getFieldsPenyakitPRB(kode) {
const fieldsMap = formPRBFieldsMap;
return Object.entries(fieldsMap)
.filter(([, [codes]]) => codes.includes(kode))
.map(([namaField, [, nilaiMinimum, nilaiMaksimum]]) => ({
namaField,
nilaiMinimum,
nilaiMaksimum
}));
}
/**
* Insert rencana kontrol
*/
async insert(data) {
return this.send({
name: this.name + 'Insert',
path: `/RencanaKontrol/insert`,
method: 'POST',
data: { request: data }
});
}
/**
* Insert rencana kontrol dengan API v2
*/
async insertV2(data) {
return this.send({
name: this.name + 'InsertV2',
path: '/RencanaKontrol/v2/Insert',
method: 'POST',
data: { request: data }
});
}
/**
* Update rencana kontrol
*/
async update(data) {
return this.send({
name: this.name + 'Update',
path: `/RencanaKontrol/Update`,
method: 'PUT',
data: { request: data }
});
}
/**
* Update rencana kontrol dengan API v2
*/
async updateV2(data) {
return this.send({
name: this.name + 'UpdateV2',
path: '/RencanaKontrol/v2/Update',
method: 'PUT',
data: { request: data }
});
}
/**
* Delete atau hapus rencana kontrol
*/
async delete(data) {
return this.send({
name: this.name + 'Hapus',
path: `/RencanaKontrol/Delete`,
method: 'DELETE',
data: { request: { t_suratkontrol: data } }
});
}
/**
* Insert surat pengantar rawat inap (SPRI)
*/
async insertSPRI(data) {
return this.send({
name: this.name + 'Insert SPRI',
path: `/RencanaKontrol/InsertSPRI`,
method: 'POST',
data: { request: data }
});
}
/**
* Update surat pengantar rawat inap (SPRI)
*/
async updateSPRI(data) {
return this.send({
name: this.name + 'Update SPRI',
path: `/RencanaKontrol/UpdateSPRI`,
method: 'PUT',
data: { request: data }
});
}
/**
* Melihat data SEP untuk keperluan rencana kontrol
*/
async sep(params) {
return this.send({
name: this.name + 'Cari SEP',
path: ['/RencanaKontrol/nosep/:nomor', params],
method: 'GET'
});
}
/**
* Melihat detail surat kontrol berdasarkan nomor surat kontrol
*
* Catatan:
* Ketika pembuatan SPRI atau jenis kontrol = 1 tidak ada referensi nomor SEP asalnya,
* jadi field response SEP kosong atau null. Sedangkan jika pembuatan surat kontrol
* atau jenis kontrol = 2, akan ter-isi field response SEP karena terdapat referensi
* nomor SEP asal ketika pembuatan surat kontrol tersebut.
*/
async cari(params) {
return this.send({
name: this.name + 'Cari Surat Kontrol',
path: ['/RencanaKontrol/noSuratKontrol/:nomor', params],
method: 'GET'
});
}
/**
* List data rencana kontrol berdasarkan nomor kartu peserta
*/
async dataByNoka(params) {
return this.send({
name: this.name + 'Data Berdasarkan No. Kartu',
path: [
'/RencanaKontrol/ListRencanaKontrol/Bulan/:bulan/Tahun/:tahun/Nokartu/:nomorKartu/filter/:filter',
{ ...params, bulan: String(params.bulan || 1).padStart(2, '0') }
],
method: 'GET'
});
}
/**
* List data rencana kontrol berdasarkan tanggal
*/
async dataByTanggal(params) {
return this.send({
name: this.name + 'Data Berdasarkan Tanggal',
path: [
'/RencanaKontrol/ListRencanaKontrol/tglAwal/:awal/tglAkhir/:akhir/filter/:filter',
params
],
method: 'GET'
});
}
/**
* Data poli untuk rencana kontrol
*/
async poli(params) {
return this.send({
name: this.name + 'Data Poli/Spesialistik',
path: [
'/RencanaKontrol/ListSpesialistik/JnsKontrol/:jenis/nomor/:nomor/TglRencanaKontrol/:tanggal',
params
],
method: 'GET'
});
}
/**
* Data dokter untuk rencana kontrol
*/
async dokter(params) {
return this.send({
name: this.name + 'Data Dokter',
path: [
'/RencanaKontrol/JadwalPraktekDokter/JnsKontrol/:jenis/KdPoli/:kodePoli/TglRencanaKontrol/:tanggal',
params
],
method: 'GET'
});
}
}