gcp-nrces-fhir
Version:
Google cloud healthcare api NRCES FHIR implimenataion
307 lines • 12 kB
JavaScript
;
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());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.EncounterClassArray = exports.EncounterStatusArray = exports.EncounterHospitalizationDischargeDispositionArray = exports.EncounterResource = exports.Encounter = void 0;
const ResourceMai_1 = __importDefault(require("./ResourceMai"));
const EncounterStatusArray = [
"planned",
"arrived",
"triaged",
"in-progress",
"onleave",
"finished",
"cancelled",
"entered-in-error",
"unknown",
];
exports.EncounterStatusArray = EncounterStatusArray;
const EncounterClassArray = [
{ code: "AMB", display: "ambulatory" },
{ code: "FLD", display: "Field" },
{ code: "HH", display: "Home Health" },
{ code: "IMP", display: "in-patient" },
{ code: "EMER", display: "emergency" },
{ code: "ACUTE", display: "inpatient acute" },
{ code: "NONAC", display: "inpatient non-acute" },
{ code: "OBSENC", display: "observation encounter" },
{ code: "PRENC", display: "pre-admission" },
{ code: "VR", display: "virtual" },
];
exports.EncounterClassArray = EncounterClassArray;
const EncounterHospitalizationDischargeDispositionArray = [
{ code: "home", display: "home" },
{ code: "alt-home", display: "Alternative home" },
{ code: "other-hcf", display: "Other healthcare facility" },
{ code: "hosp", display: "Hospice" },
{ code: "long", display: "Long-term care" },
{ code: "aadvice", display: "Left against advice" },
{ code: "exp", display: "Expired" },
{ code: "psy", display: "Psychiatric hospital" },
{ code: "rehab", display: "Rehabilitation" },
{ code: "smf", display: "Skilled nursing facility" },
{ code: "oth", display: "Other" },
];
exports.EncounterHospitalizationDischargeDispositionArray = EncounterHospitalizationDischargeDispositionArray;
class Encounter extends ResourceMai_1.default {
constructor() {
super(...arguments);
/**
*
* @param particpants particpants of encounters
* @param allPractioners supply array of practioners for filtering
* @returns array of practioners
*/
this.getPractionersFromParticipants = (particpants, allPractioners) => {
let ret = [];
if (particpants && particpants.length > 0) {
ret = particpants === null || particpants === void 0 ? void 0 : particpants.map((el) => {
const multisource = this.getFromMultResource({
reference: el.individual.reference,
});
return allPractioners.filter((el) => el.id == multisource.id)[0];
});
}
return ret;
};
/**
* This converts Practioners to encounter particpants
* @param practioners PRACTINIORS
* @returns
*/
this.convertPractionersToParticpants = (practioners) => {
let ret = [];
ret = practioners.map((el) => {
return {
individual: {
reference: `Practitioner/${el.id}`,
type: `Practitioner`,
},
type: [{ text: "Practitioner" }],
};
});
return ret;
};
}
toHtml() {
return __awaiter(this, void 0, void 0, function* () {
throw new Error("Method not implemented.");
});
}
getFHIR(options) {
const identifiers = [];
if (options.careContext) {
const id = {
type: {
coding: [
{
system: "http://terminology.hl7.org/CodeSystem/v2-0203",
code: "MR",
display: "Medical record number",
},
],
},
system: "https://ndhm.in",
value: `${options.careContext}`,
};
identifiers.push(id);
}
const body = {
resourceType: "Encounter",
id: options.id,
meta: {
lastUpdated: new Date().toISOString(),
profile: [
"https://nrces.in/ndhm/fhir/r4/StructureDefinition/Encounter",
],
},
text: {
status: "generated",
div: `<div xmlns=\"http://www.w3.org/1999/xhtml\">${options.text} </div>`,
},
identifier: identifiers,
status: options.status,
class: {
system: "http://terminology.hl7.org/CodeSystem/v3-ActCode",
code: options.class.code,
display: options.class.display,
},
subject: {
reference: `Patient/${options.patientId}`,
},
period: {
start: options.startDate,
end: options.endDate,
},
hospitalization: options.hospitalization,
diagnosis: options.diagnosis,
participant: this.rearrangeParticipants(options.participant || []),
reasonReference: options.reasonReference,
reasonCode: options.reasonCode,
account: options.account,
};
if (options.estimatedDateDischarge) {
let curExt = {
"url": "https://www.nicehms.com/estimatedDateDischarge",
"valueString": options.estimatedDateDischarge
};
if (options.extension) {
options.extension = options.extension.filter(el => el.url != "https://www.nicehms.com/estimatedDateDischarge");
options.extension.push(curExt);
}
else {
options.extension = [curExt];
}
}
if (options.intrimOrFinal) {
let curExt = {
"url": "https://www.nicehms.com/intrimOrFinal",
"valueString": options.intrimOrFinal
};
if (options.extension) {
options.extension = options.extension.filter(el => el.url != "https://www.nicehms.com/intrimOrFinal");
options.extension.push(curExt);
}
else {
options.extension = [curExt];
}
}
if (options.extension) {
body.extension = options.extension;
}
if (options.basedOn) {
body.basedOn = options.basedOn.map((el) => {
return {
reference: `${el.resource}/${el.id}`,
};
});
}
if (options.type) {
body.type = options.type;
}
if (options.organizationId) {
body.serviceProvider = {
reference: `Organization/${options.organizationId}`,
};
}
if (options.location) {
body.location = options.location;
}
return body;
}
convertFhirToObject(options) {
let ret = {
text: this.getDivText(options.text.div),
status: options.status,
class: { code: options.class.code, display: options.class.display },
patientId: `${options.subject.reference}`.substring(8),
startDate: options.period.start,
id: options.id,
};
if (options.serviceProvider) {
ret.organizationId = this.getIdFromReference({
ref: options.serviceProvider.reference,
resourceType: "Organization",
});
}
if (options.period && options.period.end) {
ret.endDate = options.period.end;
}
if (options.diagnosis) {
ret.diagnosis = options.diagnosis;
}
if (options.account) {
ret.account = options.account;
}
if (options.appointment) {
ret.appointment = options.appointment;
}
if (options.reasonCode) {
ret.reasonCode = options.reasonCode;
}
if (options.reasonReference) {
ret.reasonReference = options.reasonReference;
}
if (options.participant) {
ret.participant = options.participant;
}
if (options.hospitalization) {
ret.hospitalization = options.hospitalization;
}
if (options.extension) {
ret.extension = options.extension;
}
if (options.identifier) {
const careContext = options.identifier.filter((el) => el.system == "https://ndhm.in");
if (careContext.length > 0) {
ret.careContext = careContext[0].value;
}
}
if (options.basedOn) {
ret.basedOn = options.basedOn.map((el) => {
const ret = this.getFromMultResource({
reference: el.reference,
});
return ret;
});
}
if (options.type) {
ret.type = options.type;
}
if (options.location) {
ret.location = options.location;
}
const estimatedDateDischargeExtension = options.extension && options.extension.find((el) => el.url == "https://www.nicehms.com/estimatedDateDischarge");
if (estimatedDateDischargeExtension) {
ret.estimatedDateDischarge = estimatedDateDischargeExtension.valueString;
}
const intrimOrFinalExtension = options.extension && options.extension.find((el) => el.url == "https://www.nicehms.com/intrimOrFinal");
if (intrimOrFinalExtension) {
ret.intrimOrFinal = intrimOrFinalExtension.valueString;
}
return ret;
}
rearrangeParticipants(participant) {
const ret = participant.sort((a, b) => {
const typeA = a.type[0];
const typeB = b.type[0];
const codingA = typeA.coding ? typeA.coding[0] : undefined;
const codingB = typeB.coding ? typeB.coding[0] : undefined;
const codeA = codingA ? codingA.code : undefined;
const codeB = codingB ? codingB.code : undefined;
if (codeA && codeB) {
return codeA.localeCompare(codeB);
}
else if (codeA) {
return -1;
}
else if (codeB) {
return 1;
}
return 0;
});
return ret;
}
}
exports.Encounter = Encounter;
/**
* @deprecated
* @param options
* @returns
*/
const EncounterResource = (options) => {
const encounter = new Encounter();
return encounter.getFHIR(options);
};
exports.EncounterResource = EncounterResource;
//# sourceMappingURL=Encounter.js.map