From 4b73764c1fea162804cbd1aa59d4a2e27ee06713 Mon Sep 17 00:00:00 2001 From: mustofa-id <25121822+mustofa-id@users.noreply.github.com> Date: Wed, 14 May 2025 12:37:51 +0700 Subject: [PATCH 01/11] init --- src/fetcher.ts | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/fetcher.ts b/src/fetcher.ts index 338e385..f21cada 100644 --- a/src/fetcher.ts +++ b/src/fetcher.ts @@ -199,6 +199,21 @@ const defaultBaseUrls: Record> = { }; export class Fetcher { + // simply using custom event function instead of node:EventEmitter + public onRequest: ((option: SendOption) => void) | undefined = undefined; + public onResponse: + | (( + info: SendOption & { + /** in milliseconds */ duration: number; + type: Type; + name?: string; // TODO: name of request, it helpful for log or collect stats + }, + result: Awaited> + ) => void) + | undefined = undefined; + + public onError: ((error: unknown) => void) | undefined = undefined; + private configured = false; private config: Config = { @@ -230,7 +245,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 +334,8 @@ export class Fetcher { } } + this.onRequest?.(option); + const startedAt = performance.now(); response = await fetch(url, init).then((r) => r.text()); const json: SendResponse[T] = JSON.parse(response); @@ -327,8 +344,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}`; From 4bdf745227a938e68864c2bb633e0d2abd382869 Mon Sep 17 00:00:00 2001 From: mustofa-id <25121822+mustofa-id@users.noreply.github.com> Date: Wed, 14 May 2025 14:21:05 +0700 Subject: [PATCH 02/11] request name --- src/antrean-fktp.ts | 5 +++++ src/antrean.ts | 17 +++++++++++++++++ src/aplicares.ts | 5 +++++ src/base.ts | 1 + src/fetcher.ts | 7 ++++--- src/icare.ts | 2 ++ 6 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/antrean-fktp.ts b/src/antrean-fktp.ts index 275be04..a93cfa8 100644 --- a/src/antrean-fktp.ts +++ b/src/antrean-fktp.ts @@ -18,6 +18,7 @@ export class AntreanFKTP extends BaseApi<'pcare'> { kodepoli: string; }[]; }>({ + name: 'Referensi Poli', path: `/ref/poli/tanggal/${params.tanggal}`, method: 'GET' }); @@ -41,6 +42,7 @@ export class AntreanFKTP extends BaseApi<'pcare'> { kapasitas: number; }[]; }>({ + 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: 'Tambah Antrean', path: `/antrean/add`, method: 'POST', data @@ -122,6 +125,7 @@ export class AntreanFKTP extends BaseApi<'pcare'> { waktu: number; }) { return this.send({ + 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: '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/base.ts b/src/base.ts index 7919364..b4f948c 100644 --- a/src/base.ts +++ b/src/base.ts @@ -6,6 +6,7 @@ export abstract class BaseApi { constructor(private readonly fetcher: Fetcher) {} protected send(option: SendOption) { + option.name = `${this.type} -> ${option.name || 'unknown'}`; return this.fetcher.send(this.type, option); } diff --git a/src/fetcher.ts b/src/fetcher.ts index f21cada..15f98c1 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; @@ -200,13 +202,12 @@ const defaultBaseUrls: Record> = { export class Fetcher { // simply using custom event function instead of node:EventEmitter - public onRequest: ((option: SendOption) => void) | undefined = undefined; + public onRequest: ((info: SendOption & { type: Type }) => void) | undefined = undefined; public onResponse: | (( info: SendOption & { /** in milliseconds */ duration: number; type: Type; - name?: string; // TODO: name of request, it helpful for log or collect stats }, result: Awaited> ) => void) @@ -334,7 +335,7 @@ export class Fetcher { } } - this.onRequest?.(option); + this.onRequest?.({ ...option, type }); const startedAt = performance.now(); response = await fetch(url, init).then((r) => r.text()); const json: SendResponse[T] = JSON.parse(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, From f7f8e47bd834bd3fe738ac414ff98dcce6875150 Mon Sep 17 00:00:00 2001 From: mustofa-id <25121822+mustofa-id@users.noreply.github.com> Date: Wed, 14 May 2025 18:35:47 +0700 Subject: [PATCH 03/11] vclaim & rekam-medik names --- src/rekam-medis/index.ts | 1 + src/vclaim/lpk.ts | 8 ++++++++ src/vclaim/monitoring.ts | 8 ++++++++ src/vclaim/peserta.ts | 6 ++++++ src/vclaim/prb.ts | 9 +++++++++ src/vclaim/referensi.ts | 20 ++++++++++++++++++++ src/vclaim/rencana-kontrol.ts | 15 +++++++++++++++ src/vclaim/rujukan.ts | 19 +++++++++++++++++++ src/vclaim/sep.ts | 26 ++++++++++++++++++++++++++ 9 files changed, 112 insertions(+) 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..066c727 100644 --- a/src/vclaim/lpk.ts +++ b/src/vclaim/lpk.ts @@ -1,6 +1,10 @@ import { VClaimBaseApi } from './base.js'; export class LPK extends VClaimBaseApi { + private get name() { + return this.constructor.name + ' -> '; + } + /** * Insert Rujukan * @@ -8,6 +12,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 +26,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 +41,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 +128,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..5475bbc 100644 --- a/src/vclaim/monitoring.ts +++ b/src/vclaim/monitoring.ts @@ -1,6 +1,10 @@ import { VClaimBaseApi } from './base.js'; export class Monitoring extends VClaimBaseApi { + private get name() { + return this.constructor.name + ' -> '; + } + /** * Pencarian data kunjungan * @@ -28,6 +32,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 +78,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 +112,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 +159,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..7374edc 100644 --- a/src/vclaim/peserta.ts +++ b/src/vclaim/peserta.ts @@ -1,6 +1,10 @@ import { VClaimBaseApi } from './base.js'; export class Peserta extends VClaimBaseApi { + private get name() { + return this.constructor.name + ' -> '; + } + /** * Pencarian data peserta berdasarkan nomor kartu */ @@ -12,6 +16,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 +33,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..f730bba 100644 --- a/src/vclaim/prb.ts +++ b/src/vclaim/prb.ts @@ -2,6 +2,10 @@ import { VClaimBaseApi } from './base.js'; // TODO: make generic request and response data type as possible export class PRB extends VClaimBaseApi { + private get name() { + return this.constructor.name + ' -> '; + } + /** * Insert data rujuk balik */ @@ -71,6 +75,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 +119,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 +140,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 +190,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 +232,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..805dc7d 100644 --- a/src/vclaim/referensi.ts +++ b/src/vclaim/referensi.ts @@ -1,6 +1,10 @@ import { VClaimBaseApi } from './base.js'; export class Referensi extends VClaimBaseApi { + private get name() { + return this.constructor.name + ' -> '; + } + /** * Pencarian data diagnosa (ICD-10) */ @@ -9,6 +13,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 +27,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 +44,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 +64,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 +75,7 @@ export class Referensi extends VClaimBaseApi { */ async provinsi() { return this.send<{ list: ReferensiResult[] }>({ + name: this.name + 'Provinsi', path: `/referensi/propinsi`, method: 'GET' }); @@ -80,6 +89,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 +103,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 +114,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 +128,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 +142,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 +153,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 +167,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 +178,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 +189,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 +200,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 +211,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..d6bb699 100644 --- a/src/vclaim/rencana-kontrol.ts +++ b/src/vclaim/rencana-kontrol.ts @@ -2,6 +2,10 @@ import { VClaimBaseApi } from './base.js'; // TODO: make generic request and response data type as possible export class RencanaKontrol extends VClaimBaseApi { + private get name() { + return this.constructor.name + ' -> '; + } + /** * Insert rencana kontrol */ @@ -35,6 +39,7 @@ export class RencanaKontrol extends VClaimBaseApi { kelamin: string; tglLahir: string; }>({ + name: this.name + 'Insert', path: `/RencanaKontrol/insert`, method: 'POST', data: { request: data } @@ -77,6 +82,7 @@ export class RencanaKontrol extends VClaimBaseApi { kelamin: string; tglLahir: string; }>({ + name: this.name + 'Update', path: `/RencanaKontrol/Update`, method: 'PUT', data: { request: data } @@ -94,6 +100,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 +136,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 +172,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 +211,7 @@ export class RencanaKontrol extends VClaimBaseApi { tglRujukan: string; }; }>({ + name: this.name + 'Cari SEP', path: `/RencanaKontrol/nosep/${params.nomor}`, method: 'GET' }); @@ -259,6 +269,7 @@ export class RencanaKontrol extends VClaimBaseApi { }; }; }>({ + name: this.name + 'Cari Surat Kontrol', path: `/RencanaKontrol/noSuratKontrol/${params.nomor}`, method: 'GET' }); @@ -282,6 +293,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 +313,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 +341,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 +368,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..992cff3 100644 --- a/src/vclaim/rujukan.ts +++ b/src/vclaim/rujukan.ts @@ -2,6 +2,10 @@ import { VClaimBaseApi } from './base.js'; // TODO: make generic request and response data type as possible export class Rujukan extends VClaimBaseApi { + private get name() { + return this.constructor.name + ' -> '; + } + /** * Pencarian data rujukan berdasarkan nomor rujukan */ @@ -22,6 +26,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 +52,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 +78,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 +150,7 @@ export class Rujukan extends VClaimBaseApi { }; }; }>({ + name: this.name + 'Insert', path: `/Rujukan/insert`, method: 'POST', data: { request: { t_rujukan: data } } @@ -181,6 +189,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 +207,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 +240,7 @@ export class Rujukan extends VClaimBaseApi { tglrujukan_berakhir: string; }; }>({ + name: this.name + 'Insert Rujukan Khusus', path: `/Rujukan/Khusus/insert`, method: 'POST', data @@ -250,6 +261,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 +289,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 +363,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 +405,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 +431,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 +450,7 @@ export class Rujukan extends VClaimBaseApi { namaSarana: string; }[]; }>({ + name: this.name + 'List Sarana', path: `/Rujukan/ListSarana/PPKRujukan/${params.kodePpk}`, method: 'GET' }); @@ -461,6 +478,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 +533,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..7f228c0 100644 --- a/src/vclaim/sep.ts +++ b/src/vclaim/sep.ts @@ -2,6 +2,10 @@ import { VClaimBaseApi } from './base.js'; // TODO: make generic request and response data type as possible export class SEP extends VClaimBaseApi { + private get name() { + return this.constructor.name + ' -> '; + } + /** * Buat SEP */ @@ -149,6 +153,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 +270,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 +302,7 @@ export class SEP extends VClaimBaseApi { nomor: string; }) { return this.send({ + name: this.name + 'Hapus', path: `/SEP/${params.nomor}`, method: 'GET' }); @@ -309,6 +316,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 +558,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 +686,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 +706,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 +734,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 +759,7 @@ export class SEP extends VClaimBaseApi { noSEPSuplesi: string; }[]; }>({ + name: this.name + 'Data Induk Kecelakaan', path: `/sep/KllInduk/List/${params.nomorKartu}`, method: 'GET' }); @@ -777,6 +790,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 +828,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 +856,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 +881,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 +920,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 +962,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 +988,7 @@ export class SEP extends VClaimBaseApi { tktPelayanan: string; }; }>({ + name: this.name + 'INACBG', path: `/sep/cbg/${params.nomor}`, method: 'GET', skipDecrypt: true @@ -1011,6 +1031,7 @@ export class SEP extends VClaimBaseApi { nmdiag: string; }[]; }>({ + name: this.name + 'List Internal', path: `/SEP/Internal/${params.nomor}`, method: 'GET' }); @@ -1038,6 +1059,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 +1083,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 +1102,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 +1125,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 +1161,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 } } From 1b86230651ea83c1b097382fc2ae873628b417c2 Mon Sep 17 00:00:00 2001 From: mustofa-id <25121822+mustofa-id@users.noreply.github.com> Date: Wed, 14 May 2025 19:40:28 +0700 Subject: [PATCH 04/11] apotek names --- src/apotek/monitoring.ts | 5 +++++ src/apotek/obat.ts | 6 ++++++ src/apotek/pelayanan-obat.ts | 7 +++++++ src/apotek/referensi.ts | 10 ++++++++++ src/apotek/resep.ts | 7 +++++++ src/apotek/sep.ts | 5 +++++ 6 files changed, 40 insertions(+) diff --git a/src/apotek/monitoring.ts b/src/apotek/monitoring.ts index a763ddb..13f0c8f 100644 --- a/src/apotek/monitoring.ts +++ b/src/apotek/monitoring.ts @@ -1,6 +1,10 @@ import { ApotekBaseApi } from './base.js'; export class Monitoring extends ApotekBaseApi { + private get name() { + return this.constructor.name + ' -> '; + } + /** * Data klaim resep */ @@ -35,6 +39,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..c5803a6 100644 --- a/src/apotek/obat.ts +++ b/src/apotek/obat.ts @@ -1,6 +1,10 @@ import { ApotekBaseApi } from './base.js'; export class Obat extends ApotekBaseApi { + private get name() { + return this.constructor.name + ' -> '; + } + /** * Simpan data obat non racikan */ @@ -17,6 +21,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 +46,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..03616ca 100644 --- a/src/apotek/pelayanan-obat.ts +++ b/src/apotek/pelayanan-obat.ts @@ -1,6 +1,10 @@ import { ApotekBaseApi } from './base.js'; export class PelayananObat extends ApotekBaseApi { + private get name() { + return this.constructor.name + ' -> '; + } + /** * Hapus pelayanan obat */ @@ -14,6 +18,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 +57,7 @@ export class PelayananObat extends ApotekBaseApi { }; }; }>({ + name: this.name + 'List/Daftar', path: `/pelayanan/obat/daftar/${params.nomorSep}`, method: 'GET' }); @@ -85,6 +91,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..6eecc55 100644 --- a/src/apotek/referensi.ts +++ b/src/apotek/referensi.ts @@ -1,6 +1,10 @@ import { ApotekBaseApi } from './base.js'; export class Referensi extends ApotekBaseApi { + private get name() { + return this.constructor.name + ' -> '; + } + /** * Daftar obat DPHO */ @@ -18,6 +22,7 @@ export class Referensi extends ApotekBaseApi { aktif: string | null; }[]; }>({ + name: this.name + 'DPHO', path: `/referensi/dpho`, method: 'GET' }); @@ -36,6 +41,7 @@ export class Referensi extends ApotekBaseApi { nama: string; }[]; }>({ + name: this.name + 'Poli', path: `/referensi/poli/${params.keyword}`, method: 'GET' }); @@ -61,6 +67,7 @@ export class Referensi extends ApotekBaseApi { nama: string; }[]; }>({ + name: this.name + 'Fasilitas Kesehatan', path: `/referensi/ppk/${params.jenis}/${params.nama}`, method: 'GET' }); @@ -88,6 +95,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 +111,7 @@ export class Referensi extends ApotekBaseApi { nama: string; }[]; }>({ + name: this.name + 'Spesialistik', path: `/referensi/spesialistik`, method: 'GET' }); @@ -129,6 +138,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..ac7911c 100644 --- a/src/apotek/resep.ts +++ b/src/apotek/resep.ts @@ -1,6 +1,10 @@ import { ApotekBaseApi } from './base.js'; export class Resep extends ApotekBaseApi { + private get name() { + return this.constructor.name + ' -> '; + } + /** * Simpan data resep */ @@ -49,6 +53,7 @@ export class Resep extends ApotekBaseApi { byVerRsp: string; tglEntry: string; }>({ + name: this.name + 'Simpan', path: `/sjpresep/v3/insert`, method: 'POST', data @@ -68,6 +73,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 +115,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..99d4596 100644 --- a/src/apotek/sep.ts +++ b/src/apotek/sep.ts @@ -1,6 +1,10 @@ import { ApotekBaseApi } from './base.js'; export class SEP extends ApotekBaseApi { + private get name() { + return this.constructor.name + ' -> '; + } + /** * Data kunjungan berdasarkan nomor SEP */ @@ -34,6 +38,7 @@ export class SEP extends ApotekBaseApi { kodedokter: string; namadokter: string | null; }>({ + name: this.name + 'Cari No. Kunjungan/SEP', path: `/sep/${params.nomorSep}`, method: 'GET' }); From 93fef0518d56acbd1ef15e59f7aeec4b6bb39cee Mon Sep 17 00:00:00 2001 From: mustofa-id <25121822+mustofa-id@users.noreply.github.com> Date: Wed, 14 May 2025 19:41:14 +0700 Subject: [PATCH 05/11] clarify antrean-fktp names --- src/antrean-fktp.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/antrean-fktp.ts b/src/antrean-fktp.ts index a93cfa8..bf49aa5 100644 --- a/src/antrean-fktp.ts +++ b/src/antrean-fktp.ts @@ -2,6 +2,9 @@ import { BaseApi } from './base.js'; export class AntreanFKTP extends BaseApi<'pcare'> { protected type = 'pcare' as const; + private get name() { + return this.constructor.name + ' -> '; + } /** * Melihat referensi poli berdasarkan tanggal pelayanan @@ -18,7 +21,7 @@ export class AntreanFKTP extends BaseApi<'pcare'> { kodepoli: string; }[]; }>({ - name: 'Referensi Poli', + name: this.name + 'Referensi Poli', path: `/ref/poli/tanggal/${params.tanggal}`, method: 'GET' }); @@ -42,7 +45,7 @@ export class AntreanFKTP extends BaseApi<'pcare'> { kapasitas: number; }[]; }>({ - name: 'Referensi Dokter', + name: this.name + 'Referensi Dokter', path: `/ref/dokter/kodepoli/${params.kodePoli}/tanggal/${params.tanggal}`, method: 'GET' }); @@ -92,7 +95,7 @@ export class AntreanFKTP extends BaseApi<'pcare'> { keterangan: string; }) { return this.send({ - name: 'Tambah Antrean', + name: this.name + 'Tambah Antrean', path: `/antrean/add`, method: 'POST', data @@ -125,7 +128,7 @@ export class AntreanFKTP extends BaseApi<'pcare'> { waktu: number; }) { return this.send({ - name: 'Update Status / Panggil Antrean', + name: this.name + 'Update Status / Panggil Antrean', path: `/antrean/panggil`, method: 'POST', data @@ -149,7 +152,7 @@ export class AntreanFKTP extends BaseApi<'pcare'> { alasan: string; }) { return this.send({ - name: 'Batal Antrean', + name: this.name + 'Batal Antrean', path: `/antrean/batal`, method: 'POST', data From 76cb41560b9415f8971203555b61db17f720f929 Mon Sep 17 00:00:00 2001 From: mustofa-id <25121822+mustofa-id@users.noreply.github.com> Date: Wed, 14 May 2025 19:54:16 +0700 Subject: [PATCH 06/11] fix test script with native .env loader --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 .", From 19bc7cc291f489e55aaefda58b2da924b1c05dc2 Mon Sep 17 00:00:00 2001 From: mustofa-id <25121822+mustofa-id@users.noreply.github.com> Date: Thu, 15 May 2025 09:18:48 +0700 Subject: [PATCH 07/11] tidy up fetcher types --- src/fetcher.ts | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/fetcher.ts b/src/fetcher.ts index 15f98c1..d6920df 100644 --- a/src/fetcher.ts +++ b/src/fetcher.ts @@ -159,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> = { @@ -202,18 +202,20 @@ const defaultBaseUrls: Record> = { export class Fetcher { // simply using custom event function instead of node:EventEmitter - public onRequest: ((info: SendOption & { type: Type }) => void) | undefined = undefined; + public onRequest: ((info: SendOption & { type: Type }) => MaybePromise) | undefined = + undefined; + public onResponse: - | (( + | (( info: SendOption & { /** in milliseconds */ duration: number; - type: Type; + type: T; }, - result: Awaited> - ) => void) + result: SendResponse[T] + ) => MaybePromise) | undefined = undefined; - public onError: ((error: unknown) => void) | undefined = undefined; + public onError: ((error: unknown) => MaybePromise) | undefined = undefined; private configured = false; From a1a83eb53d95a2286465c2b0fd60ef7cdc38b482 Mon Sep 17 00:00:00 2001 From: mustofa-id <25121822+mustofa-id@users.noreply.github.com> Date: Thu, 15 May 2025 09:46:28 +0700 Subject: [PATCH 08/11] docs --- README.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/README.md b/README.md index 2a7a01c..f53d68e 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.name); + // ~> 314ms antrean -> Referensi Poli +}; +``` + ## Konfigurasi Konfigurasi mengikuti interface berikut: From 4e0a58ad969b4887ac04d22f993cf3cab86803e8 Mon Sep 17 00:00:00 2001 From: mustofa-id <25121822+mustofa-id@users.noreply.github.com> Date: Thu, 15 May 2025 09:53:42 +0700 Subject: [PATCH 09/11] changeset --- .changeset/fine-spies-design.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/fine-spies-design.md 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 From 4e8a51a0271eb042cf2f0eb28cae1a143ec5fb90 Mon Sep 17 00:00:00 2001 From: mustofa-id <25121822+mustofa-id@users.noreply.github.com> Date: Thu, 15 May 2025 13:46:57 +0700 Subject: [PATCH 10/11] don't append type to name --- README.md | 4 ++-- src/base.ts | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f53d68e..563fa3b 100644 --- a/README.md +++ b/README.md @@ -155,8 +155,8 @@ Contoh penggunaan event: ```ts jkn.onResponse = (info, result) => { - console.log('~>', Math.round(info.duration) + 'ms', info.name); - // ~> 314ms antrean -> Referensi Poli + console.log('>', Math.round(info.duration) + 'ms', info.type, info.name); + // > 279ms vclaim Peserta -> NIK }; ``` diff --git a/src/base.ts b/src/base.ts index b4f948c..7919364 100644 --- a/src/base.ts +++ b/src/base.ts @@ -6,7 +6,6 @@ export abstract class BaseApi { constructor(private readonly fetcher: Fetcher) {} protected send(option: SendOption) { - option.name = `${this.type} -> ${option.name || 'unknown'}`; return this.fetcher.send(this.type, option); } From 129156896004838a5d53212e6f065904c20ae2d6 Mon Sep 17 00:00:00 2001 From: mustofa-id <25121822+mustofa-id@users.noreply.github.com> Date: Fri, 16 May 2025 13:32:48 +0700 Subject: [PATCH 11/11] define class/api name in base class --- .env.example | 1 + src/antrean-fktp.ts | 3 --- src/apotek/monitoring.ts | 4 ---- src/apotek/obat.ts | 4 ---- src/apotek/pelayanan-obat.ts | 4 ---- src/apotek/referensi.ts | 4 ---- src/apotek/resep.ts | 4 ---- src/apotek/sep.ts | 4 ---- src/base.ts | 4 ++++ src/vclaim/lpk.ts | 4 ---- src/vclaim/monitoring.ts | 4 ---- src/vclaim/peserta.ts | 4 ---- src/vclaim/prb.ts | 4 ---- src/vclaim/referensi.ts | 4 ---- src/vclaim/rencana-kontrol.ts | 4 ---- src/vclaim/rujukan.ts | 4 ---- src/vclaim/sep.ts | 4 ---- 17 files changed, 5 insertions(+), 59 deletions(-) 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/src/antrean-fktp.ts b/src/antrean-fktp.ts index bf49aa5..4305f98 100644 --- a/src/antrean-fktp.ts +++ b/src/antrean-fktp.ts @@ -2,9 +2,6 @@ import { BaseApi } from './base.js'; export class AntreanFKTP extends BaseApi<'pcare'> { protected type = 'pcare' as const; - private get name() { - return this.constructor.name + ' -> '; - } /** * Melihat referensi poli berdasarkan tanggal pelayanan diff --git a/src/apotek/monitoring.ts b/src/apotek/monitoring.ts index 13f0c8f..d0fa75b 100644 --- a/src/apotek/monitoring.ts +++ b/src/apotek/monitoring.ts @@ -1,10 +1,6 @@ import { ApotekBaseApi } from './base.js'; export class Monitoring extends ApotekBaseApi { - private get name() { - return this.constructor.name + ' -> '; - } - /** * Data klaim resep */ diff --git a/src/apotek/obat.ts b/src/apotek/obat.ts index c5803a6..dadc7f5 100644 --- a/src/apotek/obat.ts +++ b/src/apotek/obat.ts @@ -1,10 +1,6 @@ import { ApotekBaseApi } from './base.js'; export class Obat extends ApotekBaseApi { - private get name() { - return this.constructor.name + ' -> '; - } - /** * Simpan data obat non racikan */ diff --git a/src/apotek/pelayanan-obat.ts b/src/apotek/pelayanan-obat.ts index 03616ca..f65e9f7 100644 --- a/src/apotek/pelayanan-obat.ts +++ b/src/apotek/pelayanan-obat.ts @@ -1,10 +1,6 @@ import { ApotekBaseApi } from './base.js'; export class PelayananObat extends ApotekBaseApi { - private get name() { - return this.constructor.name + ' -> '; - } - /** * Hapus pelayanan obat */ diff --git a/src/apotek/referensi.ts b/src/apotek/referensi.ts index 6eecc55..c811247 100644 --- a/src/apotek/referensi.ts +++ b/src/apotek/referensi.ts @@ -1,10 +1,6 @@ import { ApotekBaseApi } from './base.js'; export class Referensi extends ApotekBaseApi { - private get name() { - return this.constructor.name + ' -> '; - } - /** * Daftar obat DPHO */ diff --git a/src/apotek/resep.ts b/src/apotek/resep.ts index ac7911c..404a83b 100644 --- a/src/apotek/resep.ts +++ b/src/apotek/resep.ts @@ -1,10 +1,6 @@ import { ApotekBaseApi } from './base.js'; export class Resep extends ApotekBaseApi { - private get name() { - return this.constructor.name + ' -> '; - } - /** * Simpan data resep */ diff --git a/src/apotek/sep.ts b/src/apotek/sep.ts index 99d4596..6ddb6d3 100644 --- a/src/apotek/sep.ts +++ b/src/apotek/sep.ts @@ -1,10 +1,6 @@ import { ApotekBaseApi } from './base.js'; export class SEP extends ApotekBaseApi { - private get name() { - return this.constructor.name + ' -> '; - } - /** * Data kunjungan berdasarkan nomor SEP */ 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/vclaim/lpk.ts b/src/vclaim/lpk.ts index 066c727..70e75dc 100644 --- a/src/vclaim/lpk.ts +++ b/src/vclaim/lpk.ts @@ -1,10 +1,6 @@ import { VClaimBaseApi } from './base.js'; export class LPK extends VClaimBaseApi { - private get name() { - return this.constructor.name + ' -> '; - } - /** * Insert Rujukan * diff --git a/src/vclaim/monitoring.ts b/src/vclaim/monitoring.ts index 5475bbc..e9e8e1a 100644 --- a/src/vclaim/monitoring.ts +++ b/src/vclaim/monitoring.ts @@ -1,10 +1,6 @@ import { VClaimBaseApi } from './base.js'; export class Monitoring extends VClaimBaseApi { - private get name() { - return this.constructor.name + ' -> '; - } - /** * Pencarian data kunjungan * diff --git a/src/vclaim/peserta.ts b/src/vclaim/peserta.ts index 7374edc..6037c9c 100644 --- a/src/vclaim/peserta.ts +++ b/src/vclaim/peserta.ts @@ -1,10 +1,6 @@ import { VClaimBaseApi } from './base.js'; export class Peserta extends VClaimBaseApi { - private get name() { - return this.constructor.name + ' -> '; - } - /** * Pencarian data peserta berdasarkan nomor kartu */ diff --git a/src/vclaim/prb.ts b/src/vclaim/prb.ts index f730bba..21462d9 100644 --- a/src/vclaim/prb.ts +++ b/src/vclaim/prb.ts @@ -2,10 +2,6 @@ import { VClaimBaseApi } from './base.js'; // TODO: make generic request and response data type as possible export class PRB extends VClaimBaseApi { - private get name() { - return this.constructor.name + ' -> '; - } - /** * Insert data rujuk balik */ diff --git a/src/vclaim/referensi.ts b/src/vclaim/referensi.ts index 805dc7d..2d07471 100644 --- a/src/vclaim/referensi.ts +++ b/src/vclaim/referensi.ts @@ -1,10 +1,6 @@ import { VClaimBaseApi } from './base.js'; export class Referensi extends VClaimBaseApi { - private get name() { - return this.constructor.name + ' -> '; - } - /** * Pencarian data diagnosa (ICD-10) */ diff --git a/src/vclaim/rencana-kontrol.ts b/src/vclaim/rencana-kontrol.ts index d6bb699..61d9699 100644 --- a/src/vclaim/rencana-kontrol.ts +++ b/src/vclaim/rencana-kontrol.ts @@ -2,10 +2,6 @@ import { VClaimBaseApi } from './base.js'; // TODO: make generic request and response data type as possible export class RencanaKontrol extends VClaimBaseApi { - private get name() { - return this.constructor.name + ' -> '; - } - /** * Insert rencana kontrol */ diff --git a/src/vclaim/rujukan.ts b/src/vclaim/rujukan.ts index 992cff3..ce2d6d4 100644 --- a/src/vclaim/rujukan.ts +++ b/src/vclaim/rujukan.ts @@ -2,10 +2,6 @@ import { VClaimBaseApi } from './base.js'; // TODO: make generic request and response data type as possible export class Rujukan extends VClaimBaseApi { - private get name() { - return this.constructor.name + ' -> '; - } - /** * Pencarian data rujukan berdasarkan nomor rujukan */ diff --git a/src/vclaim/sep.ts b/src/vclaim/sep.ts index 7f228c0..304c50d 100644 --- a/src/vclaim/sep.ts +++ b/src/vclaim/sep.ts @@ -2,10 +2,6 @@ import { VClaimBaseApi } from './base.js'; // TODO: make generic request and response data type as possible export class SEP extends VClaimBaseApi { - private get name() { - return this.constructor.name + ' -> '; - } - /** * Buat SEP */