gcp-nrces-fhir
Version:
Google cloud healthcare api NRCES FHIR implimenataion
277 lines • 13.1 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.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