diff --git a/.changeset/fine-spies-design.md b/.changeset/fine-spies-design.md new file mode 100644 index 0000000..6abb57b --- /dev/null +++ b/.changeset/fine-spies-design.md @@ -0,0 +1,5 @@ +--- +'@ssecd/jkn': minor +--- + +Add lifecycle events diff --git a/.env.example b/.env.example index 90b08dc..937bbcb 100644 --- a/.env.example +++ b/.env.example @@ -7,6 +7,7 @@ JKN_APOTEK_USER_KEY= JKN_PCARE_USER_KEY= JKN_ICARE_USER_KEY= JKN_REKAM_MEDIS_USER_KEY= +JKN_APLICARES_USER_KEY= TEST_SEP_NUM= TEST_RM_NUM= diff --git a/README.md b/README.md index 2a7a01c..563fa3b 100644 --- a/README.md +++ b/README.md @@ -131,6 +131,35 @@ function persistSep(sep: VClaimResponse<'sep', 'insertV2'>) { } ``` +## Events + +- `onRequest` + +```ts +onRequest: ((info: SendOption & { type: Type }) => MaybePromise) | undefined = undefined; +``` + +- `onResponse` + +```ts +onResponse: ((info: SendOption & { duration: number; type: T; }, result: SendResponse[T]) => MaybePromise) | undefined = undefined; +``` + +- `onError` + +```ts +onError: ((error: unknown) => MaybePromise) | undefined = undefined; +``` + +Contoh penggunaan event: + +```ts +jkn.onResponse = (info, result) => { + console.log('>', Math.round(info.duration) + 'ms', info.type, info.name); + // > 279ms vclaim Peserta -> NIK +}; +``` + ## Konfigurasi Konfigurasi mengikuti interface berikut: diff --git a/package.json b/package.json index 64bcbf4..8a9f387 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,7 @@ }, "type": "module", "scripts": { - "vitest": "node --env-file=.env ./node_modules/vitest/vitest.mjs", - "test": "vitest", + "test": "node --env-file=.env ./node_modules/vitest/vitest.mjs", "build": "tsc && dts-buddy dist/index.d.ts -m @ssecd/jkn:src/index.js", "lint": "prettier --check . && eslint .", "format": "prettier --write .", diff --git a/src/antrean-fktp.ts b/src/antrean-fktp.ts index 275be04..4305f98 100644 --- a/src/antrean-fktp.ts +++ b/src/antrean-fktp.ts @@ -18,6 +18,7 @@ export class AntreanFKTP extends BaseApi<'pcare'> { kodepoli: string; }[]; }>({ + name: this.name + 'Referensi Poli', path: `/ref/poli/tanggal/${params.tanggal}`, method: 'GET' }); @@ -41,6 +42,7 @@ export class AntreanFKTP extends BaseApi<'pcare'> { kapasitas: number; }[]; }>({ + name: this.name + 'Referensi Dokter', path: `/ref/dokter/kodepoli/${params.kodePoli}/tanggal/${params.tanggal}`, method: 'GET' }); @@ -90,6 +92,7 @@ export class AntreanFKTP extends BaseApi<'pcare'> { keterangan: string; }) { return this.send({ + name: this.name + 'Tambah Antrean', path: `/antrean/add`, method: 'POST', data @@ -122,6 +125,7 @@ export class AntreanFKTP extends BaseApi<'pcare'> { waktu: number; }) { return this.send({ + name: this.name + 'Update Status / Panggil Antrean', path: `/antrean/panggil`, method: 'POST', data @@ -145,6 +149,7 @@ export class AntreanFKTP extends BaseApi<'pcare'> { alasan: string; }) { return this.send({ + name: this.name + 'Batal Antrean', path: `/antrean/batal`, method: 'POST', data diff --git a/src/antrean.ts b/src/antrean.ts index c067af3..94c611d 100644 --- a/src/antrean.ts +++ b/src/antrean.ts @@ -15,6 +15,7 @@ export class Antrean extends BaseApi<'antrean'> { kdpoli: string; }[] >({ + name: 'Referensi Poli', path: '/ref/poli', method: 'GET' }); @@ -30,6 +31,7 @@ export class Antrean extends BaseApi<'antrean'> { kodedokter: number; }[] >({ + name: 'Referensi Dokter', path: '/ref/dokter', method: 'GET' }); @@ -60,6 +62,7 @@ export class Antrean extends BaseApi<'antrean'> { kodedokter: number; }[] >({ + name: 'Referensi Jadwal Dokter', path: `/jadwaldokter/kodepoli/${params.poli}/tanggal/${params.tanggal}`, method: 'GET' }); @@ -77,6 +80,7 @@ export class Antrean extends BaseApi<'antrean'> { namapoli: string; }[] >({ + name: 'Referensi Poli Fingerprint', path: '/ref/poli/fp', method: 'GET' }); @@ -98,6 +102,7 @@ export class Antrean extends BaseApi<'antrean'> { tgllahir: string; daftarfp: number; }>({ + name: 'Referensi Pasien Fingerprint', path: `/ref/pasien/fp/identitas/${params.jenis}/noidentitas/${params.nomor}`, method: 'GET' }); @@ -142,6 +147,7 @@ export class Antrean extends BaseApi<'antrean'> { }[]; }) { return this.send({ + name: 'Update Jadwal Dokter', path: `/jadwaldokter/updatejadwaldokter`, method: 'POST', data @@ -226,6 +232,7 @@ export class Antrean extends BaseApi<'antrean'> { keterangan: string; }) { return this.send({ + name: 'Tambah Antrean', path: `/antrean/add`, method: 'POST', data @@ -247,6 +254,7 @@ export class Antrean extends BaseApi<'antrean'> { keterangan: string; }) { return this.send({ + name: 'Tambah Antrean Farmasi', path: `/antrean/farmasi/add`, method: 'POST', data @@ -302,6 +310,7 @@ export class Antrean extends BaseApi<'antrean'> { jenisresep?: 'Tidak ada' | 'Racikan' | 'Non racikan'; }) { return this.send({ + name: 'Update Waktu Antrean', path: `/antrean/updatewaktu`, method: 'POST', data @@ -321,6 +330,7 @@ export class Antrean extends BaseApi<'antrean'> { keterangan: string; }) { return this.send({ + name: 'Batal Antrean', path: `/antrean/batal`, method: 'POST', data @@ -350,6 +360,7 @@ export class Antrean extends BaseApi<'antrean'> { kodebooking: string; }[] >({ + name: 'List Waktu TaskId', path: `/antrean/getlisttask`, method: 'POST', data: { kodebooking: params.kodeBooking } @@ -379,6 +390,7 @@ export class Antrean extends BaseApi<'antrean'> { waktu: string; }) { return this.send<{ list: AntreanDashboard[] }>({ + name: 'Dashboard Per-Tanggal', path: `/dashboard/waktutunggu/tanggal/${params.tanggal}/waktu/${params.waktu}`, method: 'GET', skipDecrypt: true @@ -413,6 +425,7 @@ export class Antrean extends BaseApi<'antrean'> { }) { const bulan = String(params.bulan).padStart(2, '0'); return this.send<{ list: AntreanDashboard[] }>({ + name: 'Dashboard Per-Bulan', path: `/dashboard/waktutunggu/bulan/${bulan}/tahun/${params.tahun}/waktu/${params.waktu}`, method: 'GET', skipDecrypt: true @@ -426,6 +439,7 @@ export class Antrean extends BaseApi<'antrean'> { */ async perTanggal(tanggal: string) { return this.send({ + name: 'Antrean Per-Tanggal', path: `/antrean/pendaftaran/tanggal/${tanggal}`, method: 'GET' }); @@ -438,6 +452,7 @@ export class Antrean extends BaseApi<'antrean'> { */ async perKodeBooking(kodeBooking: string) { return this.send({ + name: 'Antrean Per-KodeBooking', path: `/antrean/pendaftaran/kodebooking/${kodeBooking}`, method: 'GET' }); @@ -448,6 +463,7 @@ export class Antrean extends BaseApi<'antrean'> { */ async belumDilayani() { return this.send({ + name: 'Antrean Belum Dilayani', path: `/antrean/pendaftaran/aktif`, method: 'GET' }); @@ -470,6 +486,7 @@ export class Antrean extends BaseApi<'antrean'> { jam: string; }) { return this.send({ + name: 'Antrean Belum Dilayani Per-(Poli, Dokter, Hari, dan Jam Praktik)', path: `/antrean/pendaftaran/kodepoli/${params.poli}/kodedokter/${params.dokter}/hari/${params.hari}/jampraktek/${params.jam}`, method: 'GET' }); diff --git a/src/aplicares.ts b/src/aplicares.ts index 078df76..1bdb3d8 100644 --- a/src/aplicares.ts +++ b/src/aplicares.ts @@ -16,6 +16,7 @@ export class Aplicares extends BaseApi<'aplicares'> { }, { totalitems: number } >({ + name: 'Referensi Kamar', path: `/rest/ref/kelas`, method: 'GET', skipDecrypt: true @@ -33,6 +34,7 @@ export class Aplicares extends BaseApi<'aplicares'> { async update(data: AplicaresBedData) { const { ppkCode } = await this.requiredConfig('ppkCode'); return this.send({ + name: 'Update Ketersediaan Tempat Tidur', path: `/rest/bed/update/${ppkCode}`, method: 'POST', skipContentTypeHack: true, @@ -52,6 +54,7 @@ export class Aplicares extends BaseApi<'aplicares'> { async create(data: AplicaresBedData) { const { ppkCode } = await this.requiredConfig('ppkCode'); return this.send({ + name: 'Ruangan Baru', path: `/rest/bed/create/${ppkCode}`, method: 'POST', skipContentTypeHack: true, @@ -85,6 +88,7 @@ export class Aplicares extends BaseApi<'aplicares'> { }, { totalitems: number } >({ + name: 'Ketersediaan Kamar Faskes', path: `/rest/bed/read/${ppkCode}/${params.start}/${params.limit}`, method: 'GET', skipDecrypt: true @@ -103,6 +107,7 @@ export class Aplicares extends BaseApi<'aplicares'> { }) { const { ppkCode } = await this.requiredConfig('ppkCode'); return this.send({ + name: 'Hapus Ruangan', path: `/rest/bed/delete/${ppkCode}`, method: 'POST', skipContentTypeHack: true, diff --git a/src/apotek/monitoring.ts b/src/apotek/monitoring.ts index a763ddb..d0fa75b 100644 --- a/src/apotek/monitoring.ts +++ b/src/apotek/monitoring.ts @@ -35,6 +35,7 @@ export class Monitoring extends ApotekBaseApi { }[]; }; }>({ + name: this.name + 'Data Klaim', path: `/monitoring/klaim/${params.bulan}/${params.tahun}/${params.jenisObat}/${params.status}`, method: 'GET' }); diff --git a/src/apotek/obat.ts b/src/apotek/obat.ts index 37f6ada..dadc7f5 100644 --- a/src/apotek/obat.ts +++ b/src/apotek/obat.ts @@ -17,6 +17,7 @@ export class Obat extends ApotekBaseApi { CatKhsObt: string; }) { return this.send({ + name: this.name + 'Simpan (Non-Racikan)', path: `/obatnonracikan/v3/insert`, method: 'POST', data @@ -41,6 +42,7 @@ export class Obat extends ApotekBaseApi { CatKhsObt: string; }) { return this.send({ + name: this.name + 'Simpan (Racikan)', path: `/obatracikan/v3/insert`, method: 'POST', data diff --git a/src/apotek/pelayanan-obat.ts b/src/apotek/pelayanan-obat.ts index 4cb9584..f65e9f7 100644 --- a/src/apotek/pelayanan-obat.ts +++ b/src/apotek/pelayanan-obat.ts @@ -14,6 +14,7 @@ export class PelayananObat extends ApotekBaseApi { tipeobat: string; }) { return this.send({ + name: this.name + 'Hapus', path: `/pelayanan/obat/hapus/`, method: 'DELETE', headers: { 'Content-Type': 'application/json' }, @@ -52,6 +53,7 @@ export class PelayananObat extends ApotekBaseApi { }; }; }>({ + name: this.name + 'List/Daftar', path: `/pelayanan/obat/daftar/${params.nomorSep}`, method: 'GET' }); @@ -85,6 +87,7 @@ export class PelayananObat extends ApotekBaseApi { }[]; }; }>({ + name: this.name + 'Riwayat', path: `/riwayatobat/${params.awal}/${params.akhir}/${params.nomorKartu}`, method: 'GET' }); diff --git a/src/apotek/referensi.ts b/src/apotek/referensi.ts index f06e3b6..c811247 100644 --- a/src/apotek/referensi.ts +++ b/src/apotek/referensi.ts @@ -18,6 +18,7 @@ export class Referensi extends ApotekBaseApi { aktif: string | null; }[]; }>({ + name: this.name + 'DPHO', path: `/referensi/dpho`, method: 'GET' }); @@ -36,6 +37,7 @@ export class Referensi extends ApotekBaseApi { nama: string; }[]; }>({ + name: this.name + 'Poli', path: `/referensi/poli/${params.keyword}`, method: 'GET' }); @@ -61,6 +63,7 @@ export class Referensi extends ApotekBaseApi { nama: string; }[]; }>({ + name: this.name + 'Fasilitas Kesehatan', path: `/referensi/ppk/${params.jenis}/${params.nama}`, method: 'GET' }); @@ -88,6 +91,7 @@ export class Referensi extends ApotekBaseApi { nippetugasapotek: string; checkstock: 'True' | 'False'; }>({ + name: this.name + 'Setting', path: `/referensi/settingppk/read/${params.kodeApotek}`, method: 'GET' }); @@ -103,6 +107,7 @@ export class Referensi extends ApotekBaseApi { nama: string; }[]; }>({ + name: this.name + 'Spesialistik', path: `/referensi/spesialistik`, method: 'GET' }); @@ -129,6 +134,7 @@ export class Referensi extends ApotekBaseApi { harga: string; }[]; }>({ + name: this.name + 'Cari Obat', path: `/referensi/obat/${param.jenis}/${param.tanggal}/${filter}`, method: 'GET' }); diff --git a/src/apotek/resep.ts b/src/apotek/resep.ts index 2d95ec5..404a83b 100644 --- a/src/apotek/resep.ts +++ b/src/apotek/resep.ts @@ -49,6 +49,7 @@ export class Resep extends ApotekBaseApi { byVerRsp: string; tglEntry: string; }>({ + name: this.name + 'Simpan', path: `/sjpresep/v3/insert`, method: 'POST', data @@ -68,6 +69,7 @@ export class Resep extends ApotekBaseApi { noresep: string; }) { return this.send({ + name: this.name + 'Hapus', path: `/hapusresep`, method: 'DELETE', headers: { 'Content-Type': 'application/json' }, @@ -109,6 +111,7 @@ export class Resep extends ApotekBaseApi { FASKESASAL: string; }; }>({ + name: this.name + 'List/Daftar', path: `/daftarresep`, method: 'POST', data diff --git a/src/apotek/sep.ts b/src/apotek/sep.ts index 8c16802..6ddb6d3 100644 --- a/src/apotek/sep.ts +++ b/src/apotek/sep.ts @@ -34,6 +34,7 @@ export class SEP extends ApotekBaseApi { kodedokter: string; namadokter: string | null; }>({ + name: this.name + 'Cari No. Kunjungan/SEP', path: `/sep/${params.nomorSep}`, method: 'GET' }); diff --git a/src/base.ts b/src/base.ts index 7919364..59eab78 100644 --- a/src/base.ts +++ b/src/base.ts @@ -23,6 +23,10 @@ export abstract class BaseApi { } return config; } + + protected get name() { + return this.constructor.name + ' -> '; + } } type CacheKey = `${Type}${string}`; diff --git a/src/fetcher.ts b/src/fetcher.ts index 338e385..d6920df 100644 --- a/src/fetcher.ts +++ b/src/fetcher.ts @@ -124,6 +124,8 @@ export interface Config { } export interface SendOption { + /** name of request, it helpful for log or collect stats */ + name?: string; path: `/${string}`; method?: 'GET' | 'POST' | 'PUT' | 'DELETE'; data?: unknown; @@ -157,14 +159,14 @@ export interface CamelResponse { } & E; } -export type SendResponse = { - aplicares: LowerResponse; - antrean: LowerResponse; - vclaim: CamelResponse; - apotek: CamelResponse; - pcare: CamelResponse; - icare: CamelResponse; - rekamMedis: LowerResponse; +export type SendResponse = { + aplicares: LowerResponse; + antrean: LowerResponse; + vclaim: CamelResponse; + apotek: CamelResponse; + pcare: CamelResponse; + icare: CamelResponse; + rekamMedis: LowerResponse; }; const defaultBaseUrls: Record> = { @@ -199,6 +201,22 @@ const defaultBaseUrls: Record> = { }; export class Fetcher { + // simply using custom event function instead of node:EventEmitter + public onRequest: ((info: SendOption & { type: Type }) => MaybePromise) | undefined = + undefined; + + public onResponse: + | (( + info: SendOption & { + /** in milliseconds */ duration: number; + type: T; + }, + result: SendResponse[T] + ) => MaybePromise) + | undefined = undefined; + + public onError: ((error: unknown) => MaybePromise) | undefined = undefined; + private configured = false; private config: Config = { @@ -230,7 +248,7 @@ export class Fetcher { } if (!this.config.consId || !this.config.consSecret) { - throw new Error(`cons id and secret is not defined`); + throw new Error(`cons id and secret are not defined`); } this.configured = true; @@ -319,6 +337,8 @@ export class Fetcher { } } + this.onRequest?.({ ...option, type }); + const startedAt = performance.now(); response = await fetch(url, init).then((r) => r.text()); const json: SendResponse[T] = JSON.parse(response); @@ -327,8 +347,11 @@ export class Fetcher { json.response = JSON.parse(this.decompress(decrypted)); } + const duration = performance.now() - startedAt; + this.onResponse?.({ ...option, duration, type }, json); return json; } catch (error: unknown) { + this.onError?.(error); if (this.config.throw) { if (error instanceof Error) { error.message += `. \nResponse: ${response}`; diff --git a/src/icare.ts b/src/icare.ts index 205c1fb..88a5f94 100644 --- a/src/icare.ts +++ b/src/icare.ts @@ -11,6 +11,7 @@ export class ICare extends BaseApi<'icare'> { kodedokter: number; }) { return this.send<{ url: string }>({ + name: 'FKRTL', path: `/api/rs/validate`, method: 'POST', skipContentTypeHack: true, @@ -24,6 +25,7 @@ export class ICare extends BaseApi<'icare'> { param: string; }) { return this.send<{ url: string }>({ + name: 'FKTP', path: `/api/pcare/validate`, method: 'POST', skipContentTypeHack: true, diff --git a/src/rekam-medis/index.ts b/src/rekam-medis/index.ts index 7560aa7..3e4faeb 100644 --- a/src/rekam-medis/index.ts +++ b/src/rekam-medis/index.ts @@ -56,6 +56,7 @@ export class RekamMedis extends BaseApi<'rekamMedis'> { } return this.send<{ keterangan: string }>({ + name: 'Insert Medical Record', path: `/eclaim/rekammedis/insert`, method: 'POST', skipContentTypeHack: true, diff --git a/src/vclaim/lpk.ts b/src/vclaim/lpk.ts index ed9a7ad..70e75dc 100644 --- a/src/vclaim/lpk.ts +++ b/src/vclaim/lpk.ts @@ -8,6 +8,7 @@ export class LPK extends VClaimBaseApi { */ async insert(data: DataLPK) { return this.send({ + name: this.name + 'Insert LPK', path: '/LPK/insert', method: 'POST', data: { request: { t_lpk: data } } @@ -21,6 +22,7 @@ export class LPK extends VClaimBaseApi { */ async update(data: DataLPK) { return this.send({ + name: this.name + 'Update LPK', path: '/LPK/update', method: 'PUT', data: { request: { t_lpk: data } } @@ -35,6 +37,7 @@ export class LPK extends VClaimBaseApi { nomorSep: string; }) { return this.send({ + name: this.name + 'Delete LPK', path: '/LPK/delete', method: 'DELETE', data: { request: { t_lpk: { noSep: params.nomorSep } } } @@ -121,6 +124,7 @@ export class LPK extends VClaimBaseApi { }[]; }; }>({ + name: this.name + 'Data Pengajuan Lembar Klaim', path: `/LPK/TglMasuk/${params.tanggal}/JnsPelayanan/${params.jenis}`, method: 'GET' }); diff --git a/src/vclaim/monitoring.ts b/src/vclaim/monitoring.ts index 81d3126..e9e8e1a 100644 --- a/src/vclaim/monitoring.ts +++ b/src/vclaim/monitoring.ts @@ -28,6 +28,7 @@ export class Monitoring extends VClaimBaseApi { tglSep: string; }[]; }>({ + name: this.name + 'Data Kunjungan', path: `/Monitoring/Kunjungan/Tanggal/${params.tanggal}/JnsPelayanan/${params.jenis}`, method: 'GET' }); @@ -73,6 +74,7 @@ export class Monitoring extends VClaimBaseApi { tglSep: string; }[]; }>({ + name: this.name + 'Data Klaim', path: `/Monitoring/Klaim/Tanggal/${params.tanggal}/JnsPelayanan/${params.jenis}/Status/${params.status}`, method: 'GET' }); @@ -106,6 +108,7 @@ export class Monitoring extends VClaimBaseApi { tglSep: string; }[]; }>({ + name: this.name + 'Data Histori Pelayanan Peserta', path: `/monitoring/HistoriPelayanan/NoKartu/${params.nomorKartu}/tglMulai/${params.awal}/tglAkhir/${params.akhir}`, method: 'GET' }); @@ -152,6 +155,7 @@ export class Monitoring extends VClaimBaseApi { }; }[]; }>({ + name: this.name + 'Data Klaim Jaminan Jasa Raharja', path: `/monitoring/JasaRaharja/JnsPelayanan/${params.jenis}/tglMulai/${params.awal}/tglAkhir/${params.akhir}`, method: 'GET' }); diff --git a/src/vclaim/peserta.ts b/src/vclaim/peserta.ts index 05cf45c..6037c9c 100644 --- a/src/vclaim/peserta.ts +++ b/src/vclaim/peserta.ts @@ -12,6 +12,7 @@ export class Peserta extends VClaimBaseApi { tanggal: string; }) { return this.send<{ peserta: DataPeserta }>({ + name: this.name + 'No. Kartu BPJS', path: `/Peserta/nokartu/${params.nomor}/tglSEP/${params.tanggal}`, method: 'GET' }); @@ -28,6 +29,7 @@ export class Peserta extends VClaimBaseApi { tanggal: string; }) { return this.send<{ peserta: DataPeserta }>({ + name: this.name + 'NIK', path: `/Peserta/nik/${params.nomor}/tglSEP/${params.tanggal}`, method: 'GET' }); diff --git a/src/vclaim/prb.ts b/src/vclaim/prb.ts index f6acf33..21462d9 100644 --- a/src/vclaim/prb.ts +++ b/src/vclaim/prb.ts @@ -71,6 +71,7 @@ export class PRB extends VClaimBaseApi { saran: string; tglSRB: string; }>({ + name: this.name + 'Insert PRB', path: '/PRB/insert', method: 'POST', data: { request: { t_prb: data } } @@ -114,6 +115,7 @@ export class PRB extends VClaimBaseApi { }[]; }) { return this.send({ + name: this.name + 'Update PRB', path: '/PRB/Update', method: 'PUT', data: { request: { t_prb: data } } @@ -134,6 +136,7 @@ export class PRB extends VClaimBaseApi { user: string; }) { return this.send({ + name: this.name + 'Hapus PRB', path: '/PRB/Delete', method: 'DELETE', data: { request: { t_prb: data } } @@ -183,6 +186,7 @@ export class PRB extends VClaimBaseApi { tglSRB: string; }; }>({ + name: this.name + 'Cari by Nomor SRB', path: `/prb/${params.nomorSrb}/nosep/${params.nomorSep}`, method: 'GET' }); @@ -224,6 +228,7 @@ export class PRB extends VClaimBaseApi { }[]; }; }>({ + name: this.name + 'Cari by Tanggal SRB', path: `/prb/tglMulai/${params.awal}/tglAkhir/${params.akhir}`, method: 'GET' }); diff --git a/src/vclaim/referensi.ts b/src/vclaim/referensi.ts index d974055..2d07471 100644 --- a/src/vclaim/referensi.ts +++ b/src/vclaim/referensi.ts @@ -9,6 +9,7 @@ export class Referensi extends VClaimBaseApi { keyword: string; }) { return this.send<{ diagnosa: ReferensiResult[] }>({ + name: this.name + 'Diagnosa', path: `/referensi/diagnosa/${params.keyword}`, method: 'GET' }); @@ -22,6 +23,7 @@ export class Referensi extends VClaimBaseApi { keyword: string; }) { return this.send<{ poli: ReferensiResult[] }>({ + name: this.name + 'Poli', path: `/referensi/poli/${params.keyword}`, method: 'GET' }); @@ -38,6 +40,7 @@ export class Referensi extends VClaimBaseApi { jenis: number; }) { return this.send<{ faskes: ReferensiResult[] }>({ + name: this.name + 'Fasilitas Kesehatan', path: `/referensi/faskes/${params.keyword}/${params.jenis}`, method: 'GET' }); @@ -57,6 +60,7 @@ export class Referensi extends VClaimBaseApi { kode: string; }) { return this.send<{ list: ReferensiResult[] }>({ + name: this.name + 'DPJP', path: `/referensi/dokter/pelayanan/${params.jenis}/tglPelayanan/${params.tanggal}/Spesialis/${params.kode}`, method: 'GET' }); @@ -67,6 +71,7 @@ export class Referensi extends VClaimBaseApi { */ async provinsi() { return this.send<{ list: ReferensiResult[] }>({ + name: this.name + 'Provinsi', path: `/referensi/propinsi`, method: 'GET' }); @@ -80,6 +85,7 @@ export class Referensi extends VClaimBaseApi { provinsi: string; }) { return this.send<{ list: ReferensiResult[] }>({ + name: this.name + 'Kabupaten', path: `/referensi/kabupaten/propinsi/${params.provinsi}`, method: 'GET' }); @@ -93,6 +99,7 @@ export class Referensi extends VClaimBaseApi { kabupaten: string; }) { return this.send<{ list: ReferensiResult[] }>({ + name: this.name + 'Kecamatan', path: `/referensi/kecamatan/kabupaten/${params.kabupaten}`, method: 'GET' }); @@ -103,6 +110,7 @@ export class Referensi extends VClaimBaseApi { */ async diagnosaPrb() { return this.send<{ list: ReferensiResult[] }>({ + name: this.name + 'Diagnosa PRB', path: `/referensi/diagnosaprb`, method: 'GET' }); @@ -116,6 +124,7 @@ export class Referensi extends VClaimBaseApi { nama: string; }) { return this.send<{ list: ReferensiResult[] }>({ + name: this.name + 'Obat Generik PRB', path: `/referensi/obatprb/${params.nama}`, method: 'GET' }); @@ -129,6 +138,7 @@ export class Referensi extends VClaimBaseApi { keyword: string; }) { return this.send<{ procedure: ReferensiResult[] }>({ + name: this.name + 'Prosedur (Pengajuan Klaim)', path: `/referensi/procedure/${params.keyword}`, method: 'GET' }); @@ -139,6 +149,7 @@ export class Referensi extends VClaimBaseApi { */ async klaimKelasRawat() { return this.send<{ list: ReferensiResult[] }>({ + name: this.name + 'Kelas Rawat (Pengajuan Klaim)', path: `/referensi/kelasrawat`, method: 'GET' }); @@ -152,6 +163,7 @@ export class Referensi extends VClaimBaseApi { nama: string; }) { return this.send<{ list: ReferensiResult[] }>({ + name: this.name + 'Dokter (Pengajuan Klaim)', path: `/referensi/dokter/${params.nama}`, method: 'GET' }); @@ -162,6 +174,7 @@ export class Referensi extends VClaimBaseApi { */ async klaimSpesialistik() { return this.send<{ list: ReferensiResult[] }>({ + name: this.name + 'Spesialistik (Pengajuan Klaim)', path: `/referensi/spesialistik`, method: 'GET' }); @@ -172,6 +185,7 @@ export class Referensi extends VClaimBaseApi { */ async klaimRuangRawat() { return this.send<{ list: ReferensiResult[] }>({ + name: this.name + 'Ruang Rawat (Pengajuan Klaim)', path: `/referensi/ruangrawat`, method: 'GET' }); @@ -182,6 +196,7 @@ export class Referensi extends VClaimBaseApi { */ async klaimCaraKeluar() { return this.send<{ list: ReferensiResult[] }>({ + name: this.name + 'Cara Keluar (Pengajuan Klaim)', path: `/referensi/carakeluar`, method: 'GET' }); @@ -192,6 +207,7 @@ export class Referensi extends VClaimBaseApi { */ async klaimPaskaPulang() { return this.send<{ list: ReferensiResult[] }>({ + name: this.name + 'Paska Pulang (Pengajuan Klaim)', path: `/referensi/pascapulang`, method: 'GET' }); diff --git a/src/vclaim/rencana-kontrol.ts b/src/vclaim/rencana-kontrol.ts index 855b730..61d9699 100644 --- a/src/vclaim/rencana-kontrol.ts +++ b/src/vclaim/rencana-kontrol.ts @@ -35,6 +35,7 @@ export class RencanaKontrol extends VClaimBaseApi { kelamin: string; tglLahir: string; }>({ + name: this.name + 'Insert', path: `/RencanaKontrol/insert`, method: 'POST', data: { request: data } @@ -77,6 +78,7 @@ export class RencanaKontrol extends VClaimBaseApi { kelamin: string; tglLahir: string; }>({ + name: this.name + 'Update', path: `/RencanaKontrol/Update`, method: 'PUT', data: { request: data } @@ -94,6 +96,7 @@ export class RencanaKontrol extends VClaimBaseApi { user: string; }) { return this.send({ + name: this.name + 'Hapus', path: `/RencanaKontrol/Delete`, method: 'DELETE', data: { request: { t_suratkontrol: data } } @@ -129,6 +132,7 @@ export class RencanaKontrol extends VClaimBaseApi { tglLahir: string; namaDiagnosa: string | null; }>({ + name: this.name + 'Insert SPRI', path: `/RencanaKontrol/InsertSPRI`, method: 'POST', data: { request: data } @@ -164,6 +168,7 @@ export class RencanaKontrol extends VClaimBaseApi { tglLahir: string; namaDiagnosa: string | null; }>({ + name: this.name + 'Update SPRI', path: `/RencanaKontrol/UpdateSPRI`, method: 'PUT', data: { request: data } @@ -202,6 +207,7 @@ export class RencanaKontrol extends VClaimBaseApi { tglRujukan: string; }; }>({ + name: this.name + 'Cari SEP', path: `/RencanaKontrol/nosep/${params.nomor}`, method: 'GET' }); @@ -259,6 +265,7 @@ export class RencanaKontrol extends VClaimBaseApi { }; }; }>({ + name: this.name + 'Cari Surat Kontrol', path: `/RencanaKontrol/noSuratKontrol/${params.nomor}`, method: 'GET' }); @@ -282,6 +289,7 @@ export class RencanaKontrol extends VClaimBaseApi { }) { const bulan = String(params.bulan || 0).padStart(2, '0'); return this.send<{ list: RencanaKontrolListItem[] }>({ + name: this.name + 'Data Berdasarkan No. Kartu', path: `/RencanaKontrol/ListRencanaKontrol/Bulan/${bulan}/Tahun/${params.tahun}/Nokartu/${params.nomorKartu}/filter/${params.filter}`, method: 'GET' }); @@ -301,6 +309,7 @@ export class RencanaKontrol extends VClaimBaseApi { filter: number; }) { return this.send<{ list: RencanaKontrolListItem[] }>({ + name: this.name + 'Data Berdasarkan Tanggal', path: `/RencanaKontrol/ListRencanaKontrol/tglAwal/${params.awal}/tglAkhir/${params.akhir}/filter/${params.filter}`, method: 'GET' }); @@ -328,6 +337,7 @@ export class RencanaKontrol extends VClaimBaseApi { persentase: '0.00'; }[]; }>({ + name: this.name + 'Data Poli/Spesialistik', path: `/RencanaKontrol/ListSpesialistik/JnsKontrol/${params.jenis}/nomor/${params.nomor}/TglRencanaKontrol/${params.tanggal}`, method: 'GET' }); @@ -354,6 +364,7 @@ export class RencanaKontrol extends VClaimBaseApi { kapasitas: string; }[]; }>({ + name: this.name + 'Data Dokter', path: `/RencanaKontrol/JadwalPraktekDokter/JnsKontrol/${params.jenis}/KdPoli/${params.kodePoli}/TglRencanaKontrol/${params.tanggal}`, method: 'GET' }); diff --git a/src/vclaim/rujukan.ts b/src/vclaim/rujukan.ts index 0c1f72c..ce2d6d4 100644 --- a/src/vclaim/rujukan.ts +++ b/src/vclaim/rujukan.ts @@ -22,6 +22,7 @@ export class Rujukan extends VClaimBaseApi { 2: `/Rujukan/RS/${params.nomor}` }; return this.send<{ rujukan: DataRujukan }>({ + name: this.name + `Berdasarkan Nomor (${params.sumber})`, path: paths[params.sumber], method: 'GET' }); @@ -47,6 +48,7 @@ export class Rujukan extends VClaimBaseApi { 2: `/Rujukan/RS/Peserta/${params.nomor}` }; return this.send<{ rujukan: DataRujukan }>({ + name: this.name + `Berdasarkan No. Kartu (${params.sumber})`, path: paths[params.sumber], method: 'GET' }); @@ -72,6 +74,7 @@ export class Rujukan extends VClaimBaseApi { 2: `/Rujukan/RS/List/Peserta/${params.nomor}` }; return this.send<{ rujukan: DataRujukan[] }>({ + name: this.name + `Berdasarkan No. Kartu (${params.sumber}) Multi`, path: paths[params.sumber], method: 'GET' }); @@ -143,6 +146,7 @@ export class Rujukan extends VClaimBaseApi { }; }; }>({ + name: this.name + 'Insert', path: `/Rujukan/insert`, method: 'POST', data: { request: { t_rujukan: data } } @@ -181,6 +185,7 @@ export class Rujukan extends VClaimBaseApi { user: string; }) { return this.send({ + name: this.name + 'Update', path: `/Rujukan/update`, method: 'PUT', data: { request: { t_rujukan: data } } @@ -198,6 +203,7 @@ export class Rujukan extends VClaimBaseApi { user: string; }) { return this.send({ + name: this.name + 'Hapus', path: `/Rujukan/delete`, method: 'DELETE', data: { request: { t_rujukan: data } } @@ -230,6 +236,7 @@ export class Rujukan extends VClaimBaseApi { tglrujukan_berakhir: string; }; }>({ + name: this.name + 'Insert Rujukan Khusus', path: `/Rujukan/Khusus/insert`, method: 'POST', data @@ -250,6 +257,7 @@ export class Rujukan extends VClaimBaseApi { user: string; }) { return this.send({ + name: this.name + 'Hapus Rujukan Khusus', path: `/Rujukan/Khusus/delete`, method: 'POST', data: { request: { t_rujukan: data } } @@ -277,6 +285,7 @@ export class Rujukan extends VClaimBaseApi { tglrujukan_berakhir: string; }[]; }>({ + name: this.name + 'List Rujukan Khusus', path: `/Rujukan/Khusus/List/Bulan/${params.bulan}/Tahun/${params.tahun}`, method: 'GET' }); @@ -350,6 +359,7 @@ export class Rujukan extends VClaimBaseApi { }; }; }>({ + name: this.name + 'Insert V2', path: `/Rujukan/2.0/insert`, method: 'POST', data: { request: { t_rujukan: data } } @@ -391,6 +401,7 @@ export class Rujukan extends VClaimBaseApi { user: string; }) { return this.send({ + name: this.name + 'Update V2', path: `/Rujukan/2.0/Update`, method: 'PUT', data: { request: { t_rujukan: data } } @@ -416,6 +427,7 @@ export class Rujukan extends VClaimBaseApi { persentase: string; }[]; }>({ + name: this.name + 'List Spesialistik Rujukan', path: `/Rujukan/ListSpesialistik/PPKRujukan/${params.kodePpk}/TglRujukan/${params.tanggal}`, method: 'GET' }); @@ -434,6 +446,7 @@ export class Rujukan extends VClaimBaseApi { namaSarana: string; }[]; }>({ + name: this.name + 'List Sarana', path: `/Rujukan/ListSarana/PPKRujukan/${params.kodePpk}`, method: 'GET' }); @@ -461,6 +474,7 @@ export class Rujukan extends VClaimBaseApi { namaPpkDirujuk: string; }[]; }>({ + name: this.name + 'List Rujukan Keluar Faskes', path: `/Rujukan/Keluar/List/tglMulai/${params.awal}/tglAkhir/${params.akhir}`, method: 'GET' }); @@ -515,6 +529,7 @@ export class Rujukan extends VClaimBaseApi { nomor: string; }) { return this.send<{ jumlahSEP: string }>({ + name: this.name + 'List Rujukan Keluar Faskes Berdasarkan No. Rujukan', path: `/Rujukan/JumlahSEP/${params.jenis}/${params.nomor}`, method: 'GET' }); diff --git a/src/vclaim/sep.ts b/src/vclaim/sep.ts index 4c51a4c..304c50d 100644 --- a/src/vclaim/sep.ts +++ b/src/vclaim/sep.ts @@ -149,6 +149,7 @@ export class SEP extends VClaimBaseApi { tglSep: string; }; }>({ + name: this.name + 'Insert', path: `/SEP/1.1/insert`, method: 'POST', data: { request: { t_sep: data } } @@ -265,6 +266,7 @@ export class SEP extends VClaimBaseApi { user: string; }) { return this.send({ + name: this.name + 'Update', path: `/SEP/1.1/Update`, method: 'PUT', data: { request: { t_sep: data } } @@ -296,6 +298,7 @@ export class SEP extends VClaimBaseApi { nomor: string; }) { return this.send({ + name: this.name + 'Hapus', path: `/SEP/${params.nomor}`, method: 'GET' }); @@ -309,6 +312,7 @@ export class SEP extends VClaimBaseApi { nomorRujukan: string; }) { return this.send({ + name: this.name + 'Cari', path: `/Rujukan/lastsep/norujukan/${params.nomorRujukan}`, method: 'GET' }); @@ -550,6 +554,7 @@ export class SEP extends VClaimBaseApi { tujuanKunj: string; }; }>({ + name: this.name + 'Insert V2', path: `/SEP/2.0/insert`, method: 'POST', data: { request: { t_sep: data } } @@ -677,6 +682,7 @@ export class SEP extends VClaimBaseApi { user: string; }) { return this.send({ + name: this.name + 'Update V2', path: `/SEP/2.0/update`, method: 'PUT', data: { request: { t_sep: data } } @@ -696,6 +702,7 @@ export class SEP extends VClaimBaseApi { user: string; }) { return this.send({ + name: this.name + 'Hapus V2', path: `/SEP/2.0/delete`, method: 'DELETE', skipDecrypt: true, @@ -723,6 +730,7 @@ export class SEP extends VClaimBaseApi { tglSep: string; }[]; }>({ + name: this.name + 'Suplesi Jasa Raharja', path: `/sep/JasaRaharja/Suplesi/${params.nomorKartu}/tglPelayanan/${params.tanggalPelayanan}`, method: 'GET' }); @@ -747,6 +755,7 @@ export class SEP extends VClaimBaseApi { noSEPSuplesi: string; }[]; }>({ + name: this.name + 'Data Induk Kecelakaan', path: `/sep/KllInduk/List/${params.nomorKartu}`, method: 'GET' }); @@ -777,6 +786,7 @@ export class SEP extends VClaimBaseApi { user: string; }) { return this.send({ + name: this.name + 'Pengajuan Penjamin', path: `/Sep/pengajuanSEP`, method: 'POST', data: { request: { t_sep: data } } @@ -814,6 +824,7 @@ export class SEP extends VClaimBaseApi { user: string; }) { return this.send({ + name: this.name + 'Approval Pengajuan', path: `/Sep/aprovalSEP`, method: 'POST', data: { request: { t_sep: data } } @@ -841,6 +852,7 @@ export class SEP extends VClaimBaseApi { status: string; }[]; }>({ + name: this.name + 'List Approval', path: `/Sep/persetujuanSEP/list/bulan/${bulan}/tahun/${params.tahun}`, method: 'GET' }); @@ -865,6 +877,7 @@ export class SEP extends VClaimBaseApi { }) { // TODO: clarify response type because in doc is invalid return this.send({ + name: this.name + 'Update Tanggal Pulang', path: `/Sep/updtglplg`, method: 'PUT', data: { request: { t_sep: data } } @@ -903,6 +916,7 @@ export class SEP extends VClaimBaseApi { user: string; }) { return this.send({ + name: this.name + 'Update Tanggal Pulang V2', path: `/SEP/2.0/updtglplg`, method: 'PUT', data: { request: { t_sep: data } } @@ -944,6 +958,7 @@ export class SEP extends VClaimBaseApi { user: string; }[]; }>({ + name: this.name + 'List Update Tanggal Pulang', path: `/Sep/updtglplg/list/bulan/${bulan}/tahun/${params.tahun}/${filter}`, method: 'GET' }); @@ -969,6 +984,7 @@ export class SEP extends VClaimBaseApi { tktPelayanan: string; }; }>({ + name: this.name + 'INACBG', path: `/sep/cbg/${params.nomor}`, method: 'GET', skipDecrypt: true @@ -1011,6 +1027,7 @@ export class SEP extends VClaimBaseApi { nmdiag: string; }[]; }>({ + name: this.name + 'List Internal', path: `/SEP/Internal/${params.nomor}`, method: 'GET' }); @@ -1038,6 +1055,7 @@ export class SEP extends VClaimBaseApi { user: string; }) { return this.send({ + name: this.name + 'Hapus Internal', path: `/SEP/Internal/delete`, method: 'DELETE', data: { request: { t_sep: data } } @@ -1061,6 +1079,7 @@ export class SEP extends VClaimBaseApi { /** keterangan status */ status: string; }>({ + name: this.name + 'Status Fingerprint', path: `/SEP/FingerPrint/Peserta/${params.nomorKartu}/TglPelayanan/${params.tanggal}`, method: 'GET' }); @@ -1079,6 +1098,7 @@ export class SEP extends VClaimBaseApi { noSEP: string; }[]; }>({ + name: this.name + 'List Fingerprint', path: `/SEP/FingerPrint/List/Peserta/TglPelayanan/${params.tanggal}`, method: 'GET' }); @@ -1101,6 +1121,7 @@ export class SEP extends VClaimBaseApi { }[]; }>({ // TODO: solve error endpoint not found + name: this.name + 'List Random Question', path: `/SEP/FingerPrint/randomquestion/faskesterdaftar/nokapst/${params.nomorKartu}/tglsep/${params.tanggal}`, method: 'GET' }); @@ -1136,6 +1157,7 @@ export class SEP extends VClaimBaseApi { user: string; }) { return this.send<'False' | 'True'>({ + name: this.name + 'Post Random Question', path: `/SEP/FingerPrint/randomanswer`, method: 'POST', data: { request: { t_sep: data } }