"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.generateJobConditionService = exports.generateJobObservationService = exports.generateJobEncounterService = void 0; const pelayanan_rawat_jalan_repository_1 = require("./pelayanan-rawat-jalan.repository"); const resources_repository_1 = require("../resources/resources.repository"); const dotenv = __importStar(require("dotenv")); const config_1 = require("./../../../utils/config"); const middlewares_1 = require("../../../middlewares"); dotenv.config(); const generateJobEncounterService = (limit) => __awaiter(void 0, void 0, void 0, function* () { const jobEncounter = yield (0, pelayanan_rawat_jalan_repository_1.getJobEncounter)(limit); if (jobEncounter.length < 1) { return { message: "Tidak ada data", code: 200, }; } else { jobEncounter.forEach((item) => __awaiter(void 0, void 0, void 0, function* () { const registrasiId = item.registrasi_id; const tglLayanan = item.tgl_urut; const payload = { resourceType: "Encounter", identifier: [ { system: `http://sys-ids.kemkes.go.id/encounter/${config_1.environment.satusehat.org_id}`, value: `${item.registrasi_id}`, }, ], status: "arrived", class: { system: "http://terminology.hl7.org/CodeSystem/v3-ActCode", code: "AMB", display: "ambulatory", }, subject: { reference: `Patient/${item.pasien_ihs_id}`, display: `${item.nama_pasien}`, }, participant: [ { type: [ { coding: [ { system: "http://terminology.hl7.org/CodeSystem/v3-ParticipationType", code: "ATND", display: "attender", }, ], }, ], individual: { reference: `Practitioner/${item.practitioner_ihs_id}`, display: `${item.nama_pegawai}`, }, }, ], period: { start: `${tglLayanan .toISOString() .replace(".000Z", "+00:00")}`, }, location: [ { location: { reference: `Location/${item.location_id}`, display: `${item.nama_bagian}`, }, period: { start: `${tglLayanan .toISOString() .replace(".000Z", "+00:00")}`, }, extension: [ { url: "https://fhir.kemkes.go.id/r4/StructureDefinition/ServiceClass", extension: [ { url: "value", valueCodeableConcept: { coding: [ { system: "http://terminology.kemkes.go.id/CodeSystem/locationServiceClass-Outpatient", code: "reguler", display: "Kelas Reguler", }, ], }, }, { url: "upgradeClassIndicator", valueCodeableConcept: { coding: [ { system: "http://terminology.kemkes.go.id/CodeSystem/locationUpgradeClass", code: "kelas-tetap", display: "Kelas Tetap Perawatan", }, ], }, }, ], }, ], }, ], statusHistory: [ { status: "arrived", period: { start: `${tglLayanan .toISOString() .replace(".000Z", "+00:00")}`, }, }, ], serviceProvider: { reference: `Organization/${config_1.environment.satusehat.org_id}`, }, }; const dataJob = { endpoint_name: "encounter", status: 1, method: "POST", url: `/Encounter`, key_simrs: registrasiId.toString(), payload: payload, }; const checkPatientSatSet = yield (0, resources_repository_1.insertJobData)(dataJob); if (!checkPatientSatSet) { return { no_mr: item.no_mr, registrasi_id: registrasiId, status: "failed", }; } else { const updateStatus = yield (0, pelayanan_rawat_jalan_repository_1.updateStatusRegistrasi)({ registrasi_id: parseInt(registrasiId, 10), status_satu_sehat: 1, }); let bagianId = item.bagian_id; let pegawaiId = item.pegawai_id; let pasienId = item.pasien_id; const insertAdmission = yield (0, pelayanan_rawat_jalan_repository_1.insertDataEncounterSatSet)({ bagian_id: bagianId.toString(), dr_id: pegawaiId.toString(), pasien_id: pasienId.toString(), admission_type: item.jenis_rawat, registrasi_id: item.registrasi_id, }); return { no_mr: item.no_mr, registrasi_id: registrasiId, status: "success", }; } })); } return { message: "Job Generate Success", code: 200, data: jobEncounter, }; }); exports.generateJobEncounterService = generateJobEncounterService; const generateJobObservationService = (limit, type_observation) => __awaiter(void 0, void 0, void 0, function* () { let objekId = 0; let category_code = ""; let category_display = ""; let code = ""; let code_display = ""; let valueQuantityUnit = ""; let valueQuantityCode = ""; if (type_observation === "sistolik") { objekId = 6; category_code = `vital-signs`; category_display = `Vital Signs`; code = `8480-6`; code_display = `Systolic Blood Pressure`; valueQuantityUnit = `mm[Hg]`; valueQuantityCode = `mm[Hg]`; } else if (type_observation === "diastolik") { objekId = 7; category_code = `vital-signs`; category_display = `Vital Signs`; code = `8462-4`; code_display = `Diastolic blood pressure`; valueQuantityUnit = `mm[Hg]`; valueQuantityCode = `mm[Hg]`; } else if (type_observation === "suhu_tubuh") { objekId = 13; category_code = `vital-signs`; category_display = `Vital Signs`; code = `8310-5`; code_display = `Body temperature`; valueQuantityUnit = `Cel`; valueQuantityCode = `Cel`; } else if (type_observation === "nadi") { objekId = 12; category_code = `vital-signs`; category_display = `Vital Signs`; code = `8867-4`; code_display = `Heart rate`; valueQuantityUnit = `{beats}/min`; valueQuantityCode = `{beats}/min`; } else if (type_observation === "pernapasan") { objekId = 14; category_code = `vital-signs`; category_display = `Vital Signs`; code = `9279-1`; code_display = `Respiratory rate`; valueQuantityUnit = `breaths/min`; valueQuantityCode = `/min`; } const jobObservation = yield (0, pelayanan_rawat_jalan_repository_1.getJobObservation)(limit, objekId); let dataObservation = []; if (jobObservation.length < 1) { return { message: "Tidak ada data", code: 200, }; } else { dataObservation = yield Promise.all(jobObservation.map((item) => __awaiter(void 0, void 0, void 0, function* () { const emrDetailId = item.emr_detail_id; const tglEmr = item.input_time; const payload = { resourceType: "Observation", status: "final", category: [ { coding: [ { system: "http://terminology.hl7.org/CodeSystem/observation-category", code: `${category_code}`, display: `${category_display}`, }, ], }, ], code: { coding: [ { system: "http://loinc.org", code: `${code}`, display: `${code_display}`, }, ], }, subject: { reference: `Patient/${item.patient_ihs_id}`, display: `${item.nama_pasien}`, }, encounter: { reference: `Encounter/${item.encounter_id}`, }, effectiveDateTime: `${tglEmr .toISOString() .replace(".000Z", "+00:00")}`, issued: `${tglEmr .toISOString() .replace(".000Z", "+00:00")}`, performer: [ { reference: `Practitioner/${item.practitioner_ihs_id}`, display: `${item.nama_pegawai}`, }, ], valueQuantity: { value: parseInt(item.value, 10), unit: `${valueQuantityUnit}`, system: "http://unitsofmeasure.org", code: `${valueQuantityCode}`, }, }; const dataJob = { endpoint_name: "observation", status: 1, method: "POST", url: "/Observation", key_simrs: emrDetailId.toString(), payload: payload, }; const checkObservationSatSet = yield (0, resources_repository_1.insertJobData)(dataJob); if (!checkObservationSatSet) { return { payload: payload, emr_detail_id: emrDetailId.toString(), status: "failed", }; } else { const updateStatus = yield (0, pelayanan_rawat_jalan_repository_1.updateStatusEmrDetail)({ emr_detail_id: parseInt(emrDetailId, 10), status_satu_sehat: 1, }); const getAdmissionId = yield (0, pelayanan_rawat_jalan_repository_1.getAdmissionIdByEncounterId)(item.encounter_id); const insertAdmissionObservation = yield (0, pelayanan_rawat_jalan_repository_1.insertDataEmrDetailObservationSatSet)({ admission_id: getAdmissionId === null || getAdmissionId === void 0 ? void 0 : getAdmissionId.id, emr_detail_id: parseInt(emrDetailId, 10), value: item.value, type: item.variabel, }); return { payload: payload, emr_detail_id: emrDetailId.toString(), status: "success", }; } }))); } return { message: "OK", code: 200, data: dataObservation, }; }); exports.generateJobObservationService = generateJobObservationService; const generateJobConditionService = (limit) => __awaiter(void 0, void 0, void 0, function* () { const jobCondition = yield (0, pelayanan_rawat_jalan_repository_1.getJobCondition)(limit); let dataCondition = []; if (jobCondition.length < 1) { return { message: "Tidak ada data", code: 200, }; } else { dataCondition = yield Promise.all(jobCondition.map((item) => __awaiter(void 0, void 0, void 0, function* () { const emrDetailId = item.emr_detail_id; const tglEmr = item.input_time; const tglLokal = yield (0, middlewares_1.formatTanggalLokal)(tglEmr); const payload = { resourceType: "Condition", clinicalStatus: { coding: [ { system: "http://terminology.hl7.org/CodeSystem/condition-clinical", code: "active", display: "Active", }, ], }, category: [ { coding: [ { system: "http://terminology.hl7.org/CodeSystem/condition-category", code: "encounter-diagnosis", display: "Encounter Diagnosis", }, ], }, ], code: { coding: [ { system: "http://hl7.org/fhir/sid/icd-10", code: item.kode_diagnosa, display: item.nama_diagnosa, }, ], }, subject: { reference: `Patient/${item.patient_ihs_id}`, display: `Kunjungan ${item.nama_pasien} di hari ${tglLokal}`, }, encounter: { reference: `Encounter/${item.encounter_id}`, }, onsetDateTime: `${tglEmr .toISOString() .replace(".000Z", "+00:00")}`, recordedDate: `${tglEmr .toISOString() .replace(".000Z", "+00:00")}`, }; const dataJob = { endpoint_name: "condition", status: 1, method: "POST", url: "/Condition", key_simrs: emrDetailId.toString(), payload: payload, }; const checkConditionSatSet = yield (0, resources_repository_1.insertJobData)(dataJob); if (!checkConditionSatSet) { return { payload: payload, emr_detail_id: emrDetailId.toString(), status: "failed", }; } else { const updateStatus = yield (0, pelayanan_rawat_jalan_repository_1.updateStatusEmrDetail)({ emr_detail_id: parseInt(emrDetailId, 10), status_satu_sehat: 1, }); const getAdmissionId = yield (0, pelayanan_rawat_jalan_repository_1.getAdmissionIdByEncounterId)(item.encounter_id); const insertDischargeDiagnosis = yield (0, pelayanan_rawat_jalan_repository_1.insertDataEmrDetailConditionSatSet)({ admission_id: getAdmissionId === null || getAdmissionId === void 0 ? void 0 : getAdmissionId.id, diag_code: item.kode_diagnosa, diag_status: item.variabel, diag_label: item.nama_diagnosa, emr_detail_id: parseInt(emrDetailId, 10), }); return { payload: payload, emr_detail_id: emrDetailId.toString(), status: "success", }; } }))); } return { message: "OK", code: 200, data: dataCondition, }; }); exports.generateJobConditionService = generateJobConditionService;