test-resab/backend/dist/api/satu-sehat/pelayanan-rawat-jalan/pelayanan-rawat-jalan.service.js
2025-04-27 23:29:32 +07:00

460 lines
19 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.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;