From 82dfb9a77e9be657bf9dbd2344683bb7d41d269e Mon Sep 17 00:00:00 2001 From: KeeyanGhoreshi Date: Thu, 25 Apr 2024 17:26:24 -0400 Subject: [PATCH 1/5] add rems case to indentifier --- src/views/Questionnaire/QuestionnaireForm.tsx | 34 +++++++++++++++++-- .../RemsInterface/RemsInterface.tsx | 3 +- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/views/Questionnaire/QuestionnaireForm.tsx b/src/views/Questionnaire/QuestionnaireForm.tsx index b479440..2f4dbe1 100644 --- a/src/views/Questionnaire/QuestionnaireForm.tsx +++ b/src/views/Questionnaire/QuestionnaireForm.tsx @@ -10,6 +10,7 @@ import { Meta, Organization, Parameters, + Patient, Questionnaire, QuestionnaireItem, QuestionnaireResponse, @@ -44,7 +45,7 @@ import Client from 'fhirclient/lib/Client'; import ConfigData from '../../config.json'; import { SelectPopup } from './components/SelectPopup'; import AlertDialog from './components/AlertDialog'; - +import { RemsAdminResponse } from './components/RemsInterface/RemsInterface'; import { PrepopulationResults } from './SmartApp'; import { v4 as uuid } from 'uuid'; import axios, { AxiosResponse } from 'axios'; @@ -116,11 +117,16 @@ export function QuestionnaireForm(props: QuestionnaireProps) { const [formLoaded, setFormLoaded] = useState(''); const [showRxAlert, setShowRxAlert] = useState({ open: false }); const [formValidationErrors, setFormValidationErrors] = useState([]); + const [patient, setPatient] = useState(undefined); const partialForms: PartialForms = {}; const LForms = window.LForms; const questionnaireFormId = `formContainer-${props.questionnaireForm.id}-${props.tabIndex}`; useEffect(() => { + const patientId = getPatient(); + props.smartClient.request(patientId).then((res) => { + setPatient(res); + }); // search for any partially completed QuestionnaireResponses if (props.response) { const response = props.response; @@ -1649,8 +1655,32 @@ export function QuestionnaireForm(props: QuestionnaireProps) { }; axios .post('http://localhost:8090/etasu/met', specialtyRxBundle, options) - .then(response => { + .then((response: RemsAdminResponse) => { const proceedToRems = () => { + const caseNumber = response.data?.case_number; + if(caseNumber && patient) { + const endDate = new Date(Date.now() + 86400000); // 86400000 is 1 day in milliseconds + patient.identifier?.push( + { + value: caseNumber, + system: 'http://hl7.org/fhir/sid/rems-case', + period: { + start: new Date(Date.now()).toISOString(), + end: endDate.toISOString() + } + } + ); + // update patient + props.smartClient.request({ + url: patient.resourceType + '/' + patient.id, + method: 'PUT', + headers: { + 'content-type': 'application/json' + }, + body: JSON.stringify(patient) + }); + } + props.setSpecialtyRxBundle(specialtyRxBundle); props.setRemsAdminResponse(response); }; diff --git a/src/views/Questionnaire/components/RemsInterface/RemsInterface.tsx b/src/views/Questionnaire/components/RemsInterface/RemsInterface.tsx index baa775c..b658575 100644 --- a/src/views/Questionnaire/components/RemsInterface/RemsInterface.tsx +++ b/src/views/Questionnaire/components/RemsInterface/RemsInterface.tsx @@ -4,12 +4,13 @@ import './RemsInterface.css'; import Paper from '@mui/material/Paper'; import Button from '@mui/material/Button'; import { Bundle } from 'fhir/r4'; +import { AxiosResponse } from 'axios'; interface RemsInterfaceProps { remsAdminResponse: RemsAdminResponse; specialtyRxBundle: Bundle; } -interface RemsAdminResponse { +export interface RemsAdminResponse extends AxiosResponse { data: JsonData; } From 0a188ba11bfb61b10241a91bb5aa572bf9d76064 Mon Sep 17 00:00:00 2001 From: KeeyanGhoreshi Date: Thu, 25 Apr 2024 17:27:01 -0400 Subject: [PATCH 2/5] prettier --- src/views/Questionnaire/QuestionnaireForm.tsx | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/views/Questionnaire/QuestionnaireForm.tsx b/src/views/Questionnaire/QuestionnaireForm.tsx index 2f4dbe1..106d8ea 100644 --- a/src/views/Questionnaire/QuestionnaireForm.tsx +++ b/src/views/Questionnaire/QuestionnaireForm.tsx @@ -124,7 +124,7 @@ export function QuestionnaireForm(props: QuestionnaireProps) { useEffect(() => { const patientId = getPatient(); - props.smartClient.request(patientId).then((res) => { + props.smartClient.request(patientId).then(res => { setPatient(res); }); // search for any partially completed QuestionnaireResponses @@ -1658,18 +1658,16 @@ export function QuestionnaireForm(props: QuestionnaireProps) { .then((response: RemsAdminResponse) => { const proceedToRems = () => { const caseNumber = response.data?.case_number; - if(caseNumber && patient) { + if (caseNumber && patient) { const endDate = new Date(Date.now() + 86400000); // 86400000 is 1 day in milliseconds - patient.identifier?.push( - { - value: caseNumber, - system: 'http://hl7.org/fhir/sid/rems-case', - period: { - start: new Date(Date.now()).toISOString(), - end: endDate.toISOString() - } + patient.identifier?.push({ + value: caseNumber, + system: 'http://hl7.org/fhir/sid/rems-case', + period: { + start: new Date(Date.now()).toISOString(), + end: endDate.toISOString() } - ); + }); // update patient props.smartClient.request({ url: patient.resourceType + '/' + patient.id, From 66760017f888118662b142d6bcbc69aec5fec563 Mon Sep 17 00:00:00 2001 From: KeeyanGhoreshi Date: Thu, 25 Apr 2024 17:32:31 -0400 Subject: [PATCH 3/5] update test --- .../MedReqDropDown/etasuStatus/__test__/EtasuStatus.test.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/views/Patient/MedReqDropDown/etasuStatus/__test__/EtasuStatus.test.tsx b/src/views/Patient/MedReqDropDown/etasuStatus/__test__/EtasuStatus.test.tsx index de6ce6f..abf9942 100644 --- a/src/views/Patient/MedReqDropDown/etasuStatus/__test__/EtasuStatus.test.tsx +++ b/src/views/Patient/MedReqDropDown/etasuStatus/__test__/EtasuStatus.test.tsx @@ -131,10 +131,8 @@ describe('Test the EtasuStatus Component', () => { remsAdminResponse={etasu.parameter[0].resource} /> ); - - // verify that the values are updated from the call to get the ETASU expect( - await screen.findByText('Status: ' + etasu.parameter[0].resource.status) + await screen.findByText('Status: Pending') ).toBeInTheDocument(); expect(await screen.findAllByTestId('etasu-item')).toHaveLength(3); } From bef11152a4ea586da49eeaafabf1a014d073b23a Mon Sep 17 00:00:00 2001 From: KeeyanGhoreshi Date: Thu, 25 Apr 2024 17:42:15 -0400 Subject: [PATCH 4/5] time limit --- src/views/Questionnaire/QuestionnaireForm.tsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/views/Questionnaire/QuestionnaireForm.tsx b/src/views/Questionnaire/QuestionnaireForm.tsx index 106d8ea..d40ac38 100644 --- a/src/views/Questionnaire/QuestionnaireForm.tsx +++ b/src/views/Questionnaire/QuestionnaireForm.tsx @@ -1656,13 +1656,25 @@ export function QuestionnaireForm(props: QuestionnaireProps) { axios .post('http://localhost:8090/etasu/met', specialtyRxBundle, options) .then((response: RemsAdminResponse) => { + const remsCaseUrl = 'http://hl7.org/fhir/sid/rems-case'; // placeholder const proceedToRems = () => { const caseNumber = response.data?.case_number; if (caseNumber && patient) { + patient.identifier = patient.identifier?.filter((iden) => { + if(iden.system === remsCaseUrl && iden.period ) { + if(iden.period?.end) { + const endDate = new Date(iden.period.end); + if(endDate.getMilliseconds() < Date.now()) { + return false; // filter out old identifiers + } + } + } + return true; + }); const endDate = new Date(Date.now() + 86400000); // 86400000 is 1 day in milliseconds patient.identifier?.push({ value: caseNumber, - system: 'http://hl7.org/fhir/sid/rems-case', + system: remsCaseUrl, period: { start: new Date(Date.now()).toISOString(), end: endDate.toISOString() From 8610ce62552a85576cad742604b71c4302eca056 Mon Sep 17 00:00:00 2001 From: KeeyanGhoreshi Date: Thu, 25 Apr 2024 17:45:38 -0400 Subject: [PATCH 5/5] prettier --- .../etasuStatus/__test__/EtasuStatus.test.tsx | 4 +--- src/views/Questionnaire/QuestionnaireForm.tsx | 8 ++++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/views/Patient/MedReqDropDown/etasuStatus/__test__/EtasuStatus.test.tsx b/src/views/Patient/MedReqDropDown/etasuStatus/__test__/EtasuStatus.test.tsx index abf9942..f2e7662 100644 --- a/src/views/Patient/MedReqDropDown/etasuStatus/__test__/EtasuStatus.test.tsx +++ b/src/views/Patient/MedReqDropDown/etasuStatus/__test__/EtasuStatus.test.tsx @@ -131,9 +131,7 @@ describe('Test the EtasuStatus Component', () => { remsAdminResponse={etasu.parameter[0].resource} /> ); - expect( - await screen.findByText('Status: Pending') - ).toBeInTheDocument(); + expect(await screen.findByText('Status: Pending')).toBeInTheDocument(); expect(await screen.findAllByTestId('etasu-item')).toHaveLength(3); } }); diff --git a/src/views/Questionnaire/QuestionnaireForm.tsx b/src/views/Questionnaire/QuestionnaireForm.tsx index d40ac38..14b4757 100644 --- a/src/views/Questionnaire/QuestionnaireForm.tsx +++ b/src/views/Questionnaire/QuestionnaireForm.tsx @@ -1660,11 +1660,11 @@ export function QuestionnaireForm(props: QuestionnaireProps) { const proceedToRems = () => { const caseNumber = response.data?.case_number; if (caseNumber && patient) { - patient.identifier = patient.identifier?.filter((iden) => { - if(iden.system === remsCaseUrl && iden.period ) { - if(iden.period?.end) { + patient.identifier = patient.identifier?.filter(iden => { + if (iden.system === remsCaseUrl && iden.period) { + if (iden.period?.end) { const endDate = new Date(iden.period.end); - if(endDate.getMilliseconds() < Date.now()) { + if (endDate.getMilliseconds() < Date.now()) { return false; // filter out old identifiers } }