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