diff --git a/src/components/EtasuStatus/EtasuStatus.jsx b/src/components/EtasuStatus/EtasuStatus.jsx index 97417ab..76e5749 100644 --- a/src/components/EtasuStatus/EtasuStatus.jsx +++ b/src/components/EtasuStatus/EtasuStatus.jsx @@ -2,7 +2,7 @@ import { useState, useEffect, useContext } from 'react'; import { SettingsContext } from '../../containers/ContextProvider/SettingsProvider.jsx'; import { EtasuStatusComponent } from './EtasuStatusComponent.jsx'; import { standardsBasedGetEtasu } from '../../util/util.js'; -import { createMedicationFromMedicationRequest } from '../../util/fhir.js'; +import { createMedicationFromMedicationRequest, getDrugCodeableConceptFromMedicationRequest } from '../../util/fhir.js'; // converts code into etasu for the component to render // simplifies usage for applications that only know the code, not the case they want to display @@ -22,7 +22,7 @@ export const EtasuStatus = props => { const getEtasuStatus = (medication) => { const body = makeBody(medication); setEtasuData(body); - const display = body.parameter[1]?.resource.code.coding[0].display; + const display = body.parameter[1]?.resource.code?.coding[0].display; setDisplay(display); const standardEtasuUrl = `${globalState.remsAdminServer}/4_0_0/GuidanceResponse/$rems-etasu`; standardsBasedGetEtasu(standardEtasuUrl, body, setRemsAdminResponse); diff --git a/src/containers/RequestBuilder.jsx b/src/containers/RequestBuilder.jsx index 19daf20..8ecc399 100644 --- a/src/containers/RequestBuilder.jsx +++ b/src/containers/RequestBuilder.jsx @@ -122,7 +122,6 @@ const RequestBuilder = props => { let remsAdminUrls = []; // get all the remsAdminUrl for each MedicationRequest state.medicationRequests?.data?.forEach(request => { - const code = request?.medicationCodeableConcept?.coding[0]?.code; const remsAdminUrl = getMedicationSpecificRemsAdminUrl(request, globalState, hook); if (remsAdminUrl) { remsAdminUrls.push(remsAdminUrl); diff --git a/src/util/fhir.js b/src/util/fhir.js index 7c4a1c3..69f751f 100644 --- a/src/util/fhir.js +++ b/src/util/fhir.js @@ -68,6 +68,17 @@ function createMedicationFromMedicationRequest(medicationRequest) { medication.id = medicationRequest?.id + '-med'; if (medicationRequest.medicationCodeableConcept) { medication.code = medicationRequest.medicationCodeableConcept; + } else if (medicationRequest.medicationReference) { + const reference = medicationRequest?.medicationReference; + medication.code = undefined; + medicationRequest?.contained?.every(e => { + if (e.resourceType + '/' + e.id === reference.reference) { + if (e.resourceType === 'Medication') { + console.log('Get Medication code from contained resource'); + medication.code = e.code; + } + } + }); } return medication; } diff --git a/src/util/util.js b/src/util/util.js index 16af625..fddfdf4 100644 --- a/src/util/util.js +++ b/src/util/util.js @@ -1,5 +1,7 @@ import axios from 'axios'; +import { getDrugCodeableConceptFromMedicationRequest } from './fhir'; import { ORDER_SIGN, ORDER_SELECT, PATIENT_VIEW, ENCOUNTER_START } from './data'; + /** * Retrieves a SMART launch context from an endpoint to append as a "launch" query parameter to a SMART app launch URL (see SMART docs for more about launch context). * This applies mainly if a SMART app link on a card is to be launched. The link needs a "launch" query param with some opaque value from the SMART server entity. @@ -96,8 +98,10 @@ const getMedicationSpecificRemsAdminUrl = (request, globalState, hook) => { if (Object.keys(request).length === 0) { return undefined; } - const display = request.medicationCodeableConcept?.coding?.[0]?.display; - const rxnorm = request.medicationCodeableConcept?.coding?.[0]?.code; + + const codeableConcept = getDrugCodeableConceptFromMedicationRequest(request); + const display = codeableConcept?.coding?.[0]?.display; + const rxnorm = codeableConcept?.coding?.[0]?.code; if (!rxnorm) { console.log("ERROR: unknown MedicationRequest code: '", rxnorm);