diff --git a/src/components/RequestBox/RequestBox.jsx b/src/components/RequestBox/RequestBox.jsx index 14931fa..0fee9bb 100644 --- a/src/components/RequestBox/RequestBox.jsx +++ b/src/components/RequestBox/RequestBox.jsx @@ -1,13 +1,15 @@ 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, PATIENT_VIEW } from '../../util/data.js'; -import { getAge, createMedicationDispenseFromMedicationRequest } from '../../util/fhir.js'; +import { getAge, createMedicationDispenseFromMedicationRequest, createMedicationFromMedicationRequest } from '../../util/fhir.js'; import { retrieveLaunchContext, prepPrefetch } from '../../util/util.js'; import './request.css'; +import axios from 'axios'; const RequestBox = props => { const [state, setState] = useState({ @@ -15,6 +17,7 @@ const RequestBox = props => { response: {}, submittedRx: false }); + const [globalState,] = useContext(SettingsContext); const { prefetchedResources, @@ -53,6 +56,7 @@ const RequestBox = props => { } }, [prefetchCompleted]); + const renderPatientInfo = () => { if (Object.keys(patient).length === 0) { return
; @@ -189,17 +193,54 @@ const RequestBox = props => { }); }; + const makeBody = medication => { + return { + resourceType: 'Parameters', + parameter: [ + { + name: 'patient', + resource: patient + }, + { + name: 'medication', + resource: medication + } + ] + }; + }; + /** * 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 + request, + 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());