From f59e671d0fb5e7e07cfb85c4bf8b7dc99cc4b7e8 Mon Sep 17 00:00:00 2001 From: Ariel Virgulto Date: Fri, 17 May 2024 13:52:41 -0400 Subject: [PATCH 1/3] Send auth number with newRx --- src/components/RequestBox/RequestBox.jsx | 51 +++++++++++++++++++++--- src/util/buildScript.2017071.js | 5 ++- 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/src/components/RequestBox/RequestBox.jsx b/src/components/RequestBox/RequestBox.jsx index c0f1f70..9e6a75a 100644 --- a/src/components/RequestBox/RequestBox.jsx +++ b/src/components/RequestBox/RequestBox.jsx @@ -1,12 +1,13 @@ import { Button, ButtonGroup, Grid } from '@mui/material'; import _ from 'lodash'; -import { useEffect, useState } from 'react'; +import { SettingsContext } from '../../containers/ContextProvider/SettingsProvider.jsx'; +import { useEffect, useState, useContext } from 'react'; import buildNewRxRequest from '../../util/buildScript.2017071.js'; import MuiAlert from '@mui/material/Alert'; import Snackbar from '@mui/material/Snackbar'; import { shortNameMap, ORDER_SIGN, ORDER_SELECT, PATIENT_VIEW } from '../../util/data.js'; -import { getAge, createMedicationDispenseFromMedicationRequest } from '../../util/fhir.js'; -import { retrieveLaunchContext, prepPrefetch } from '../../util/util.js'; +import { getAge, createMedicationDispenseFromMedicationRequest, createMedicationFromMedicationRequest } from '../../util/fhir.js'; +import { retrieveLaunchContext, prepPrefetch, standardsBasedGetEtasu } from '../../util/util.js'; import './request.css'; const RequestBox = props => { @@ -14,8 +15,10 @@ const RequestBox = props => { gatherCount: 0, response: {}, submittedRx: false, - prefetchCompleted: false + prefetchCompleted: false, + authNumber: '' }); + const [globalState,] = useContext(SettingsContext); const { prefetchedResources, @@ -61,6 +64,10 @@ const RequestBox = props => { } }, [props.prefetchCompleted]); + useEffect(() => { + getEtasu(); + }, [request]) + const renderPatientInfo = () => { if (Object.keys(patient).length === 0) { return
; @@ -197,6 +204,39 @@ const RequestBox = props => { }); }; + const makeBody = medication => { + return { + resourceType: 'Parameters', + parameter: [ + { + name: 'patient', + resource: patient + }, + { + name: 'medication', + resource: medication + } + ] + }; + }; + + const getEtasu = () => { + const medication = createMedicationFromMedicationRequest(request); + const body = makeBody(medication); + const standardEtasuUrl = `${globalState.remsAdminServer}/4_0_0/GuidanceResponse/$rems-etasu`; + standardsBasedGetEtasu(standardEtasuUrl, body, getAuthNumberFromEtasu); + } + + const getAuthNumberFromEtasu = (resp) => { + if (resp && resp.contained) { + resp?.contained[0]?.parameter.map(metRequirements => { + if (metRequirements.name === 'auth_number') { + setState(prevState => ({ ...prevState, authNumber: metRequirements.valueString })); + } + }); + } + } + /** * Send NewRx for new Medication to the Pharmacy Information System (PIMS) */ @@ -207,7 +247,8 @@ const RequestBox = props => { var newRx = buildNewRxRequest( prefetchedResources.patient, prefetchedResources.practitioner, - request + request, + state.authNumber ); console.log('Prepared NewRx:'); diff --git a/src/util/buildScript.2017071.js b/src/util/buildScript.2017071.js index f09232f..cf482f8 100644 --- a/src/util/buildScript.2017071.js +++ b/src/util/buildScript.2017071.js @@ -298,7 +298,8 @@ function buildNewRxMedication(doc, medicationRequestResource) { export default function buildNewRxRequest( patientResource, practitionerResource, - medicationRequestResource + medicationRequestResource, + authNumber ) { var doc = document.implementation.createDocument('', '', null); var message = doc.createElement('Message'); @@ -318,6 +319,8 @@ export default function buildNewRxRequest( const d1 = new Date(); const messageIdValue = d1.getTime(); xmlAddTextNode(doc, header, 'MessageID', messageIdValue); + // Add in auth number here + xmlAddTextNode(doc, header, 'AuthorizationNumber', authNumber); // SentTime xmlAddTextNode(doc, header, 'SentTime', d1.toISOString()); From e3705ddd4b082a9709070595ca114173547920ab Mon Sep 17 00:00:00 2001 From: Ariel Virgulto Date: Sun, 19 May 2024 16:17:53 -0400 Subject: [PATCH 2/3] Update to get auth number from etasu call --- src/components/RequestBox/RequestBox.jsx | 49 ++++++++++++------------ 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/src/components/RequestBox/RequestBox.jsx b/src/components/RequestBox/RequestBox.jsx index 9e6a75a..b91474b 100644 --- a/src/components/RequestBox/RequestBox.jsx +++ b/src/components/RequestBox/RequestBox.jsx @@ -7,8 +7,9 @@ import MuiAlert from '@mui/material/Alert'; import Snackbar from '@mui/material/Snackbar'; import { shortNameMap, ORDER_SIGN, ORDER_SELECT, PATIENT_VIEW } from '../../util/data.js'; import { getAge, createMedicationDispenseFromMedicationRequest, createMedicationFromMedicationRequest } from '../../util/fhir.js'; -import { retrieveLaunchContext, prepPrefetch, standardsBasedGetEtasu } from '../../util/util.js'; +import { retrieveLaunchContext, prepPrefetch } from '../../util/util.js'; import './request.css'; +import axios from 'axios'; const RequestBox = props => { const [state, setState] = useState({ @@ -16,7 +17,7 @@ const RequestBox = props => { response: {}, submittedRx: false, prefetchCompleted: false, - authNumber: '' + remsAdminResponse: '' }); const [globalState,] = useContext(SettingsContext); @@ -64,9 +65,6 @@ const RequestBox = props => { } }, [props.prefetchCompleted]); - useEffect(() => { - getEtasu(); - }, [request]) const renderPatientInfo = () => { if (Object.keys(patient).length === 0) { @@ -220,35 +218,38 @@ const RequestBox = props => { }; }; - const getEtasu = () => { - const medication = createMedicationFromMedicationRequest(request); - const body = makeBody(medication); - const standardEtasuUrl = `${globalState.remsAdminServer}/4_0_0/GuidanceResponse/$rems-etasu`; - standardsBasedGetEtasu(standardEtasuUrl, body, getAuthNumberFromEtasu); - } - - const getAuthNumberFromEtasu = (resp) => { - if (resp && resp.contained) { - resp?.contained[0]?.parameter.map(metRequirements => { - if (metRequirements.name === 'auth_number') { - setState(prevState => ({ ...prevState, authNumber: metRequirements.valueString })); - } - }); - } - } - /** * Send NewRx for new Medication to the Pharmacy Information System (PIMS) */ - const sendRx = () => { + const sendRx = async () => { console.log('Sending NewRx to: ' + pimsUrl); + console.log('Getting auth number ') + const medication = createMedicationFromMedicationRequest(request); + const body = makeBody(medication); + const standardEtasuUrl = `${globalState.remsAdminServer}/4_0_0/GuidanceResponse/$rems-etasu`; + let authNumber = ''; + await axios({ + method: 'post', + url: standardEtasuUrl, + data: body + }).then( + response => { + if (response.data.parameter[0].resource && response.data.parameter[0].resource.contained) { + response.data.parameter[0].resource?.contained[0]?.parameter.map(metRequirements => { + if (metRequirements.name === 'auth_number') { + authNumber = metRequirements.valueString; + } + }); + } + } + ); // build the NewRx Message var newRx = buildNewRxRequest( prefetchedResources.patient, prefetchedResources.practitioner, request, - state.authNumber + authNumber ); console.log('Prepared NewRx:'); From 89666d82c385ce61519c388167c4aab7ac7ace81 Mon Sep 17 00:00:00 2001 From: Ariel Virgulto Date: Sun, 19 May 2024 19:06:42 -0400 Subject: [PATCH 3/3] Remove unused state variable --- src/components/RequestBox/RequestBox.jsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/RequestBox/RequestBox.jsx b/src/components/RequestBox/RequestBox.jsx index b91474b..f2ce0da 100644 --- a/src/components/RequestBox/RequestBox.jsx +++ b/src/components/RequestBox/RequestBox.jsx @@ -16,8 +16,7 @@ const RequestBox = props => { gatherCount: 0, response: {}, submittedRx: false, - prefetchCompleted: false, - remsAdminResponse: '' + prefetchCompleted: false }); const [globalState,] = useContext(SettingsContext);