"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.jadwalOperasiService = exports.listJadwalOperasiService = exports.pasienBaruService = exports.checkInService = exports.batalAntreanService = exports.sisaAntreanService = exports.daftarPerjanjianService = exports.statusAntreanService = void 0; const jknmobile_repository_1 = require("./jknmobile.repository"); const axiosClient_1 = require("../../../utils/axiosClient"); const dotenv = __importStar(require("dotenv")); const time_1 = require("./../../../middlewares/time"); dotenv.config(); const urlPhis = process.env.urlPHIS || ""; const statusAntreanService = (data) => __awaiter(void 0, void 0, void 0, function* () { const resultqueryStatusAntrean = yield (0, jknmobile_repository_1.statusAntrean)(data); if (resultqueryStatusAntrean.length < 1) { return false; } const jumlah_terdaftar = resultqueryStatusAntrean.length; let sisa_kuota = resultqueryStatusAntrean[0].kuota - jumlah_terdaftar; if (sisa_kuota < 0) { sisa_kuota = 0; } const arr_sudah_soap = {}; const arr_belum_soap = []; resultqueryStatusAntrean.forEach((valresultqueryStatusAntrean) => { if (valresultqueryStatusAntrean.emr_id) { arr_sudah_soap[valresultqueryStatusAntrean.registrasi_id] = valresultqueryStatusAntrean.emr_id; } else { arr_belum_soap.push(valresultqueryStatusAntrean.urutan); } }); const terakhir_panggil = Math.min(...arr_belum_soap); const jumlah_terlayani = Object.keys(arr_sudah_soap).length; const sisa_antrian = jumlah_terdaftar - jumlah_terlayani; const dataWillOutput = { namapoli: resultqueryStatusAntrean[0].nama_bagian, namadokter: resultqueryStatusAntrean[0].dpjp_hfis_nama, totalantrean: jumlah_terdaftar, sisaantrean: sisa_antrian, antreanpanggil: terakhir_panggil.toString(), sisakuotajkn: sisa_kuota, kuotajkn: resultqueryStatusAntrean[0].kuota, sisakuotanonjkn: sisa_kuota, kuotanonjkn: resultqueryStatusAntrean[0].kuota, keterangan: "", }; return dataWillOutput; }); exports.statusAntreanService = statusAntreanService; const daftarPerjanjianService = (data) => __awaiter(void 0, void 0, void 0, function* () { if (!data.norm) { return { message: "Pasien Baru", code: 202, }; } const checkNasabahBPJS = yield (0, jknmobile_repository_1.checkDataNasabahBPJS)(data.norm); if (!checkNasabahBPJS[0].pasien_nasabah_id) { const dataNasabah = { pasien_id: checkNasabahBPJS[0].pasien_id, nasabah_id: process.env.nasabahBPJS, no_peserta: data.nomorkartu, input_user_id: data.input_user_id, }; const nasabahBPJS = yield (0, jknmobile_repository_1.insertDataNasabahBPJS)(dataNasabah); checkNasabahBPJS[0].pasien_nasabah_id = nasabahBPJS.pasien_nasabah_id; } let pasien_id = checkNasabahBPJS[0].pasien_id; let pasien_nasabah_id = checkNasabahBPJS[0].pasien_nasabah_id; const checkPendaftaranTerdaftar = yield (0, jknmobile_repository_1.checkRegistrasiTerdaftar)(pasien_id); if (checkPendaftaranTerdaftar.length > 0) { if (checkPendaftaranTerdaftar[0].kode_poli_bpjs === data.kodepoli) { return { code: 201, message: `Anda sudah terdaftar di Poli ini pada tanggal ${checkPendaftaranTerdaftar[0].tgl_masuk}`, }; } else if (checkPendaftaranTerdaftar[0].kode_poli_bpjs !== data.kodepoli && new Date(checkPendaftaranTerdaftar[0].tgl_masuk + " 00:00:00") === new Date(data.tanggalperiksa + " 00:00:00")) { return { code: 201, message: `Anda sudah terdaftar di Poli ${checkPendaftaranTerdaftar[0].nama_bagian} pada tanggal ${checkPendaftaranTerdaftar[0].tgl_masuk}`, }; } } const dataPendaftaranTerdaftarToday = { pasien_id, kode_poli_bpjs: data.kodepoli, }; const checkPendaftaranTerdaftarToday = yield (0, jknmobile_repository_1.checkRegistrasiTerdaftarToday)(dataPendaftaranTerdaftarToday); if (checkPendaftaranTerdaftarToday.length > 0) { const checkEmrPasien = yield (0, jknmobile_repository_1.checkEmrTerdaftar)(data); if (checkEmrPasien.length < 1) { return { code: 201, message: "Hari Ini Ada Pelayanan Yang Belum Diselesaikan.", }; } } const jeniskunjungan = data.jeniskunjungan; let responseRujukan = {}; let responseSKDP = {}; let collectionData = {}; let noRujukan = data.nomorreferensi; if (jeniskunjungan === 1 || jeniskunjungan === 4) { const checkRujukan = yield (0, jknmobile_repository_1.checkRujukanService)(data.nomorreferensi); if (!checkRujukan) { const urlRujukan = `${urlPhis}API/BPJS/SIMRS-VCLAIM/V2/CARIRUJUKAN/NORUJUKAN/${data.nomorreferensi}`; const method = "GET"; const headersData = {}; responseRujukan = yield (0, axiosClient_1.requestAxios)(headersData, urlRujukan, method, null); if (responseRujukan.data.metadata.code == "200") { const insertRujukan = yield (0, jknmobile_repository_1.insertRujukanService)(responseRujukan.data, data.input_user_id); } else { return { code: 201, message: responseRujukan.data.metadata.message, }; } } } else if (jeniskunjungan === 3) { const urlSKDP = `${urlPhis}API/BPJS/SIMRS-VCLAIM/V2/SURAT-KONTROL/INTERNAL/CARI/${data.nomorreferensi}`; const method = "GET"; const headersData = {}; responseSKDP = yield (0, axiosClient_1.requestAxios)(headersData, urlSKDP, method, null); if (responseSKDP.data.metadata.code == "200") { noRujukan = responseSKDP.data.response.sep.provPerujuk.noRujukan; const checkRujukan = yield (0, jknmobile_repository_1.checkRujukanService)(noRujukan); if (!checkRujukan) { const urlRujukan = `${urlPhis}API/BPJS/SIMRS-VCLAIM/V2/CARIRUJUKAN/NORUJUKAN/${noRujukan}`; const method = "GET"; const headersData = {}; responseRujukan = yield (0, axiosClient_1.requestAxios)(headersData, urlRujukan, method, null); if (responseRujukan.data.metadata.code == "200") { const insertRujukan = yield (0, jknmobile_repository_1.insertRujukanService)(responseRujukan.data, data.input_user_id); } else { return { code: 201, message: responseRujukan.data.metadata.message, }; } } } else { return { code: 201, message: responseSKDP.data.metadata.message, }; } } const checkHariLibur = yield (0, jknmobile_repository_1.checkHariLiburMerah)(data); if (checkHariLibur) { return { code: 201, message: "Hari ini merupakan tanggal merah nasional", }; } const checkDokterReady = yield (0, jknmobile_repository_1.checkDokterReadyService)(data); let kuota = 0; let jumlah_terdaftar = 0; let sisaPasien = 0; if (checkDokterReady.length > 0) { //kuota kuota = parseInt(checkDokterReady[0].kuota, 10); jumlah_terdaftar = parseInt(checkDokterReady[0].jumlah_terdaftar, 10); if (kuota > 0) { sisaPasien = kuota - jumlah_terdaftar; if (sisaPasien < 1) { return { code: 201, message: "Quota Dokter Tidak Tersedia di SIMRS", }; } } //cuti if (checkDokterReady[0].tgl_akhir_cuti) { return { code: 201, message: "Dokter Sedang Cuti", }; } } else { return { code: 201, message: "Dokter Tidak Tersedia di SIMRS", }; } collectionData = { data, pasien_id, pasien_nasabah_id, noRujukan, }; const insertPendaftaran = yield (0, jknmobile_repository_1.insertPendaftaranService)(collectionData); return { code: 200, message: "OK", data: { nomorantrean: insertPendaftaran.urutan, angkaantrean: insertPendaftaran.urutan, kodebooking: insertPendaftaran.registrasi_id, norm: data.norm, namapoli: insertPendaftaran.bagian, namadokter: insertPendaftaran.dpjp, estimasidilayani: insertPendaftaran.estimasidilayani, sisakuotajkn: sisaPasien, kuotajkn: kuota, sisakuotanonjkn: sisaPasien, kuotanonjkn: kuota, keterangan: "Peserta harap 60 menit lebih awal guna pencatatan administrasi.", }, }; }); exports.daftarPerjanjianService = daftarPerjanjianService; const sisaAntreanService = (data) => __awaiter(void 0, void 0, void 0, function* () { const sisaAntrean = yield (0, jknmobile_repository_1.sisaDataAntrean)(data); if (sisaAntrean) { let SPM = process.env.SPM; let sisa_antrean = parseInt(sisaAntrean.sisaantrean, 10); let waktuTunggu = SPM * (sisa_antrean - 1); return { code: 200, message: "OK", data: { nomorantrean: sisaAntrean.urutan, namapoli: sisaAntrean.nama_bagian, namadokter: sisaAntrean.nama_pegawai, sisaantrean: sisa_antrean, antreanpanggil: sisaAntrean.antreanpanggil ? sisaAntrean.antreanpanggil : "", waktutunggu: waktuTunggu, keterangan: "", }, }; } else { return { code: 201, message: "Data Tidak Ditemukan atau sudah dibatalkan", }; } }); exports.sisaAntreanService = sisaAntreanService; const batalAntreanService = (data) => __awaiter(void 0, void 0, void 0, function* () { const checkRegistrasi = yield (0, jknmobile_repository_1.checkDataRegistrasi)(data); if (!checkRegistrasi) { return { code: 201, message: "Data Tidak Ditemukan atau sudah dibatalkan", }; } const checkEmrPasien = yield (0, jknmobile_repository_1.checkEmrValidasi)(data); if (checkEmrPasien.length > 0) { return { code: 201, message: "Pasien Sudah diisi EMR", }; } const batalAntrean = yield (0, jknmobile_repository_1.batalDataAntrean)(data); if (batalAntrean) { return { code: 200, message: "OK", }; } }); exports.batalAntreanService = batalAntreanService; const checkInService = (data) => __awaiter(void 0, void 0, void 0, function* () { const checkRegistrasi = yield (0, jknmobile_repository_1.checkDataRegistrasi)(data); if (!checkRegistrasi) { return { code: 201, message: "Data Tidak Ditemukan atau sudah dibatalkan", }; } const checkIn = yield (0, jknmobile_repository_1.checkInData)(data); if (checkIn) { return { code: 200, message: "OK", }; } }); exports.checkInService = checkInService; const pasienBaruService = (data) => __awaiter(void 0, void 0, void 0, function* () { const checkPasienIdData = yield (0, jknmobile_repository_1.checkPasienId)(data.nik); if (checkPasienIdData) { return { code: 200, message: "Harap datang ke admisi untuk melengkapi data rekam medis", norm: checkPasienIdData.no_mr, }; } const pasienBaru = yield (0, jknmobile_repository_1.insertPasienBaru)(data); if (pasienBaru) { return { code: 200, message: "Harap datang ke admisi untuk melengkapi data rekam medis", norm: pasienBaru.no_mr, }; } else { return { code: 201, message: "Pasien Baru Gagal", }; } }); exports.pasienBaruService = pasienBaruService; const listJadwalOperasiService = (data) => __awaiter(void 0, void 0, void 0, function* () { const listOperasi = yield (0, jknmobile_repository_1.listJadwalOperasi)(data); if (listOperasi.length > 0) { let new_result_end = []; yield Promise.all(listOperasi.map((element) => __awaiter(void 0, void 0, void 0, function* () { let jenisTindakan = []; if (element.jenistindakan) { let matches = element.jenistindakan.match(/\d+/g); yield Promise.all(matches.map((value) => __awaiter(void 0, void 0, void 0, function* () { const getNamaTindakanBedah = yield (0, jknmobile_repository_1.getTindakanBedah)(value); jenisTindakan.push(getNamaTindakanBedah); }))); jenisTindakan = jenisTindakan.join(", "); } else { jenisTindakan = "-"; } let new_result = { kodebooking: element.kodebooking, tanggaloperasi: element.tanggaloperasi, jenistindakan: jenisTindakan, kodepoli: element.kodepoli ? element.kodepoli : "", namapoli: element.namapoli ? element.namapoli : "", terlaksana: element.terlaksana, nopeserta: element.nopeserta, lastupdate: new Date((0, time_1.dateNow)()).getTime(), }; new_result_end.push(new_result); }))); return { code: 200, message: "OK", data: new_result_end, }; } else { return { code: 201, message: "Jadwal Operasi Tidak Ditemukan", }; } }); exports.listJadwalOperasiService = listJadwalOperasiService; const jadwalOperasiService = (data) => __awaiter(void 0, void 0, void 0, function* () { const jadwalOperasi = yield (0, jknmobile_repository_1.getJadwalOperasi)(data); if (jadwalOperasi.length > 0) { let new_result_end = []; yield Promise.all(jadwalOperasi.map((element) => __awaiter(void 0, void 0, void 0, function* () { let jenisTindakan = []; if (element.jenistindakan) { let matches = element.jenistindakan.match(/\d+/g); yield Promise.all(matches.map((value) => __awaiter(void 0, void 0, void 0, function* () { const getNamaTindakanBedah = yield (0, jknmobile_repository_1.getTindakanBedah)(value); jenisTindakan.push(getNamaTindakanBedah); }))); jenisTindakan = jenisTindakan.join(", "); } else { jenisTindakan = "-"; } let new_result = { kodebooking: element.kodebooking, tanggaloperasi: element.tanggaloperasi, jenistindakan: jenisTindakan, kodepoli: element.kodepoli ? element.kodepoli : "", namapoli: element.namapoli ? element.namapoli : "", terlaksana: element.terlaksana, }; new_result_end.push(new_result); }))); return { code: 200, message: "OK", data: new_result_end, }; } else { return { code: 201, message: "Jadwal Operasi Tidak Ditemukan", }; } }); exports.jadwalOperasiService = jadwalOperasiService;