UNPKG

gcp-nrces-fhir

Version:

Google cloud healthcare api NRCES FHIR implimenataion

307 lines 12 kB
"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()); }); }; 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