From eec7d458a1486008ddfbeb405ef0c32423f37e5b Mon Sep 17 00:00:00 2001 From: Ariel Virgulto Date: Mon, 13 May 2024 11:02:25 -0400 Subject: [PATCH] Update etasu for medication reference --- src/components/EtasuStatus/EtasuStatus.jsx | 4 ++-- src/containers/RequestBuilder.jsx | 1 - src/util/fhir.js | 11 +++++++++++ src/util/util.js | 7 +++++-- 4 files changed, 18 insertions(+), 5 deletions(-) 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 375bbc1..cbb341f 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 663c039..874b998 100644 --- a/src/util/util.js +++ b/src/util/util.js @@ -1,4 +1,5 @@ import axios from 'axios'; +import { getDrugCodeableConceptFromMedicationRequest } from './fhir'; /** * 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). @@ -96,8 +97,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);