UNPKG

gcp-nrces-fhir

Version:

Google cloud healthcare api NRCES FHIR implimenataion

277 lines 13.1 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.ClaimResponse = void 0; const ResourceMai_1 = __importDefault(require("../resources/ResourceMai")); class ClaimResponse extends ResourceMai_1.default { getFHIR(options) { const body = { resourceType: "ClaimResponse", id: options.id || undefined, contained: options.containedInlineResource, modifierExtension: options.modifierExtension, extension: options.extension, meta: { versionId: "1", lastUpdated: new Date().toISOString(), source: "#JrkobxCRdZUI6QNh", }, language: options.language, text: { status: "generated", div: options.text, }, identifier: options.identifier, disposition: options.disposition, preAuthRef: options.preAuthRef, preAuthPeriod: options.preAuthPeriod, status: options.status, type: options.type, subType: options.subType, use: options.use, patient: options.patient && { reference: options.patient.resource && `${options.patient.resource}/${options.patient.id}`, type: options.patient.type, identifier: options.patient.identifier, display: options.patient.display, }, created: options.created, insurer: options.patient && { reference: options.insurer.resource && `${options.insurer.resource}/${options.insurer.id}`, type: options.insurer.type, identifier: options.insurer.identifier, display: options.insurer.display, }, requestor: options.requestor && { reference: options.requestor.resource && `${options.requestor.resource}/${options.requestor.id}`, type: options.requestor.type, identifier: options.requestor.identifier, display: options.requestor.display, }, request: options.request || undefined, outcome: options.outcome, payeeType: options.payeeType, item: options.item, detail: options.detail, total: options.total, payment: options.payment, fundsReserve: options.fundsReserve, formCode: options.formCode, form: options.form, addItem: options.addItem, communicationRequest: options.communicationRequest && options.communicationRequest.map((el) => { return { reference: el.resource && `${el.resource}/${el.id}`, type: el.type, identifier: el.identifier, display: el.display, }; }), insurance: options.insurance, error: options.error, }; return body; } convertFhirToObject(options) { var _a; const ret = { text: (_a = options === null || options === void 0 ? void 0 : options.div) === null || _a === void 0 ? void 0 : _a.Text, resourceType: "ClaimResponse", identifier: options.identifier, type: options.type, use: options.use, created: options.created, outcome: options.outcome, patient: this.getFromMultResource(options.patient), insurer: this.getFromMultResource(options.insurer), status: options.status, preAuthPeriod: options.preAuthPeriod, total: options.total, form: options.form, addItem: options.addItem, error: options.error }; if (options.language) { ret.language = options.language; } if (options.extension) { ret.extension = options.extension; } if (options.modifierExtension) { ret.modifierExtension = options.modifierExtension; } if (options.requestor) { ret.requestor = this.getFromMultResource(options.requestor); } if (options.request) { ret.request = this.getFromMultResource(options.request); } if (options.subType) { ret.subType = options.subType; } if (options.disposition) { ret.disposition = ret.disposition; } if (options.preAuthRef) { ret.preAuthRef = ret.preAuthRef; } if (options.payeeType) { ret.payeeType = ret.payeeType; } if (options.item) { ret.item = options.item; } if (options.detail) { ret.detail = options.detail; } if (options.payment) { ret.payment = options.payment; } if (options.fundsReserve) { ret.fundsReserve = options.fundsReserve; } if (options.formCode) { ret.formCode = options.formCode; } return ret; } toHtml(options) { var _a, _b; return __awaiter(this, void 0, void 0, function* () { const getAdjudication = (adjication) => { const retAdjucation = adjication.map((el) => { var _a, _b; let ret = ""; ret += `<tr>`; ret += `<td> ${el.id || ""} </td>`; ret += `<td>${this.codeableConceptToHtml(el.category)}</td>`; ret += `<td>${this.codeableConceptToHtml(el.reason)}</td>`; ret += `<td>${((_a = el.amount) === null || _a === void 0 ? void 0 : _a.currency) || ""}${((_b = el.amount) === null || _b === void 0 ? void 0 : _b.value) || ""} </td>`; ret += `<td>${el.value || ""}</td>`; ret += `<td> ${el.extension && el.extension.map((ex) => this.extensionToHtml(ex)).join("<br/>")} ${el.modifierExtension && el.modifierExtension .map((ex) => this.extensionToHtml(ex)) .join("<br/>")}</td>`; ret += `</tr>`; return ret; }); const ret = ` <table data-pdfmake="{'widths':['10%','25%', '15%', '15%', '15%', '20%']}"> <tr> <th>Id</th> <th>Category</th> <th>Reason</th> <th>Amount</th> <th>Value</th> <th>Extension</th> ${(retAdjucation === null || retAdjucation === void 0 ? void 0 : retAdjucation.join("")) || ""} </tr> </table> `; return ret; }; const getDetail = (detail) => { let ret = `<p> ${detail.detailSequence && `Sequence ${detail.detailSequence}`} ${detail.id && `Id ${detail.id}`} ${detail.noteNumber && `NoteNumber ${detail.noteNumber}`}</p>`; ret += detail.adjudication && `<p>Adjudication</P ${getAdjudication(detail.adjudication)}`; ret += detail.extension && `<p>Extension</p>${detail.extension .map((el) => this.extensionToHtml(el)) .join("<br/>")}`; ret += detail.modifierExtension && `<p>Modified Extension</p>${detail.modifierExtension .map((el) => this.extensionToHtml(el)) .join("<br/>")}`; detail.subDetail && detail.subDetail.map(el => { // @ts-ignore delete el.subDetail; ret += detail.subDetail && `<p>Sub Detail</p>${getDetail(el)}`; }); return ret; }; const claimResponse = this.convertFhirToObject(options.body); const renderList = (items) => `<ul>${items.map((item) => `<li>${item}</li>`).join("")}</ul>`; const renderCodeableConcept = (concept) => { var _a; return concept ? `<span>${concept.text || ((_a = concept.coding) === null || _a === void 0 ? void 0 : _a.map((c) => c.display).join(", ")) || ""}</span>` : ""; }; const renderReference = (reference) => reference ? `<span>${reference.reference || reference.display || ""}</span>` : ""; const renderMoney = (money) => money ? `<span>${money.currency || ""} ${money.value || ""}</span>` : ""; return ` <div> <h1>Claim Response</h1> <p><strong>Resource Type:</strong> ${claimResponse.resourceType}</p> <p><strong>ID:</strong> ${claimResponse.id || "N/A"}</p> <p><strong>Text:</strong> ${claimResponse.text}</p> <p><strong>Status:</strong> ${claimResponse.status}</p> <p><strong>Outcome:</strong> ${claimResponse.outcome}</p> <p><strong>Use:</strong> ${claimResponse.use}</p> ${claimResponse.adjudication && `<p><b>Adjudication</b></p>${getAdjudication(claimResponse.adjudication)}`} <p><strong>Created:</strong> ${claimResponse.created}</p> <p><strong>Disposition:</strong> ${claimResponse.disposition || "N/A"}</p> <h2>Totals</h2> ${renderList(claimResponse.total.map((total) => `<div><strong>Category:</strong> ${renderCodeableConcept(total.category)} <strong>Amount:</strong> ${renderMoney(total.amount)}</div>`))} <h2>Items</h2> ${renderList(((_a = claimResponse.item) === null || _a === void 0 ? void 0 : _a.map((item) => `<div> <p><strong>Item Sequence:</strong> ${item.itemSequence}</p> <p><strong>Adjudication:</strong></p> ${getAdjudication(item.adjudication)} </div>`)) || [])} <h2>Detail</h2> ${claimResponse.detail && claimResponse.detail.map((el) => getDetail(el)).join("<br/>")} <h2>Payment</h2> ${claimResponse.payment ? ` <div> ${claimResponse.payment.type && `<p><strong>Type:</strong> ${this.codeableConceptToHtml(claimResponse.payment.type)}</p>`} ${claimResponse.payment.amount && `<p><strong>Amount:</strong> ${renderMoney(claimResponse.payment.amount)}</p>`} <p><strong>Date:</strong> ${claimResponse.payment.date || "N/A"}</p> ${claimResponse.payment.adjustment && `<p><strong>Adjustment:</strong> ${renderMoney(claimResponse.payment.adjustment)}</p>`} </div>` : "<p>No payment details available.</p>"} <h2>Errors</h2> ${renderList(((_b = claimResponse.error) === null || _b === void 0 ? void 0 : _b.map((error) => `<div> <p><strong>Code:</strong> ${renderCodeableConcept(error.code)}</p> <p><strong>Item Sequence:</strong> ${error.itemSequence || "N/A"}</p> <p><strong>Detail Sequence:</strong> ${error.detailSequence || "N/A"}</p> <p><strong>Sub Detail Sequence:</strong> ${error.subDetailSequence || "N/A"}</p> </div>`)) || [])} </div> `; }); } } exports.ClaimResponse = ClaimResponse; //# sourceMappingURL=ClaimResponse.js.map