"use strict"; 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.sendObservationService = void 0; const config_1 = require("../../../../utils/config"); const generate_token_service_1 = require("../../generate-token/generate-token.service"); const observation_repository_1 = require("./observation.repository"); const axiosClient_1 = require("../../../../utils/axiosClient"); const date_fns_tz_1 = require("date-fns-tz"); const date = new Date(); const timeZone = config_1.environment.timezone; const formattedUtcDate = new Date((0, date_fns_tz_1.format)(date, "yyyy-MM-dd HH:mm:ss", { timeZone }) + " UTC"); const baseUrl = config_1.environment.satusehat.url_base; const orgId = config_1.environment.satusehat.org_id; const sendObservationService = (limit) => __awaiter(void 0, void 0, void 0, function* () { var _a; const tokenService = yield (0, generate_token_service_1.checkTokenService)(); if ((tokenService === null || tokenService === void 0 ? void 0 : tokenService.code) !== 200) { throw new Error("Generate Token Failed"); } let token = (_a = tokenService === null || tokenService === void 0 ? void 0 : tokenService.data) === null || _a === void 0 ? void 0 : _a.access_token; const getDataObservationReady = yield (0, observation_repository_1.getDataObservation)(limit); const resultPush = []; if (getDataObservationReady.length > 0) { const promises = getDataObservationReady.map((element) => __awaiter(void 0, void 0, void 0, function* () { const headersData = { "Content-Type": "application/json", Authorization: `Bearer ${token}`, }; const url = `${baseUrl}/Observation`; const method = "POST"; const tglLayanan = element.input_time_emr; let code = ""; let code_display = ""; let valueQuantityUnit = ""; let valueQuantityCode = ""; if (element.objek_id === 6) { code = `8480-6`; code_display = `Systolic Blood Pressure`; valueQuantityUnit = `mm[Hg]`; valueQuantityCode = `mm[Hg]`; } else if (element.objek_id === 7) { code = `8462-4`; code_display = `Diastolic blood pressure`; valueQuantityUnit = `mm[Hg]`; valueQuantityCode = `mm[Hg]`; } else if (element.objek_id === 13) { code = `8310-5`; code_display = `Body temperature`; valueQuantityUnit = `Cel`; valueQuantityCode = `Cel`; } else if (element.objek_id === 12) { code = `8867-4`; code_display = `Heart rate`; valueQuantityUnit = `{beats}/min`; valueQuantityCode = `{beats}/min`; } else if (element.objek_id === 14) { code = `9279-1`; code_display = `Respiratory rate`; valueQuantityUnit = `breaths/min`; valueQuantityCode = `/min`; } const payload = { resourceType: "Observation", status: "final", category: [ { coding: [ { system: "http://terminology.hl7.org/CodeSystem/observation-category", code: "vital-signs", display: "Vital Signs", }, ], }, ], code: { coding: [ { system: "http://loinc.org", code: code, display: code_display, }, ], }, subject: { reference: `Patient/${element.patient_id}`, display: `${element.patient_name}`, }, encounter: { reference: `Encounter/${element.encounter_id}`, }, effectiveDateTime: `${tglLayanan .toISOString() .replace(".000Z", "+00:00")}`, issued: `${tglLayanan .toISOString() .replace(".000Z", "+00:00")}`, performer: [ { reference: `Practitioner/${element.practitioner_id}`, display: `${element.practitioner_name}`, }, ], valueQuantity: { value: parseInt(element.value, 10), unit: valueQuantityUnit, system: "http://unitsofmeasure.org", code: valueQuantityCode, }, }; const response = yield (0, axiosClient_1.requestAxios)(headersData, url, method, payload); if (response.status === 201) { const updateInsertIdPatient = (0, observation_repository_1.updateInsertIdObservationRepo)(element.emr_detail_id, payload, response.data, response.data.id, response.data.resourceType); resultPush.push(Object.assign(Object.assign({}, element), { status: "sukses" })); } else { const updateInsertIdPatient = (0, observation_repository_1.updateInsertIdObservationRepo)(element.emr_detail_id, payload, response.data, "0", "Observation", 1); resultPush.push(Object.assign(Object.assign({}, element), { status: "gagal", response: response.data })); } })); yield Promise.all(promises); } return resultPush; }); exports.sendObservationService = sendObservationService;