test-resab/backend/dist/api/bpjs/jknmobile/jknmobile.service.js
2025-04-27 23:29:32 +07:00

431 lines
17 KiB
JavaScript

"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;