From f8ca7df7433dad72a7fc26890386a9cbb1075071 Mon Sep 17 00:00:00 2001 From: Jacob Jeevan Date: Tue, 23 Jun 2026 16:49:12 +0530 Subject: [PATCH 1/6] feat: do not set end date when updating to selected statuses for planned encounters --- .../QuestionTypes/EncounterQuestion.tsx | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx b/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx index 7df9898e44f..1981684f792 100644 --- a/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx +++ b/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx @@ -137,12 +137,31 @@ export function EncounterQuestion({ useEffect(() => { if ( encounter.status === EncounterStatus.DISCHARGED || - encounter.status === EncounterStatus.COMPLETED || + encounter.status === EncounterStatus.COMPLETED + ) { + if (!encounter.period.end) { + handleUpdateEncounter({ + period: { + ...encounter.period, + end: new Date().toISOString(), + }, + }); + } + } else if ( encounter.status === EncounterStatus.CANCELLED || encounter.status === EncounterStatus.DISCONTINUED || encounter.status === EncounterStatus.ENTERED_IN_ERROR ) { - if (!encounter.period.end) { + if (encounterData?.status === EncounterStatus.PLANNED) { + if (encounter.period.end) { + handleUpdateEncounter({ + period: { + ...encounter.period, + end: undefined, + }, + }); + } + } else if (!encounter.period.end) { handleUpdateEncounter({ period: { ...encounter.period, From dbb62a46946a2355c849d99fd97502974a52dd83 Mon Sep 17 00:00:00 2001 From: Jacob Jeevan Date: Wed, 24 Jun 2026 16:00:14 +0530 Subject: [PATCH 2/6] fix: check if start date is in future instead --- .../QuestionTypes/EncounterQuestion.tsx | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx b/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx index 1981684f792..aefb6da1aa6 100644 --- a/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx +++ b/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx @@ -135,24 +135,17 @@ export function EncounterQuestion({ }); useEffect(() => { + const isStartDateInFuture = + encounter.period.start && new Date(encounter.period.start) > new Date(); + if ( encounter.status === EncounterStatus.DISCHARGED || - encounter.status === EncounterStatus.COMPLETED - ) { - if (!encounter.period.end) { - handleUpdateEncounter({ - period: { - ...encounter.period, - end: new Date().toISOString(), - }, - }); - } - } else if ( + encounter.status === EncounterStatus.COMPLETED || encounter.status === EncounterStatus.CANCELLED || encounter.status === EncounterStatus.DISCONTINUED || encounter.status === EncounterStatus.ENTERED_IN_ERROR ) { - if (encounterData?.status === EncounterStatus.PLANNED) { + if (isStartDateInFuture) { if (encounter.period.end) { handleUpdateEncounter({ period: { From 95641fee527cd4b8e27a746f1e27c9c3e09f5f85 Mon Sep 17 00:00:00 2001 From: Jacob Jeevan Date: Wed, 24 Jun 2026 16:03:52 +0530 Subject: [PATCH 3/6] chore: cleanup --- .../Questionnaire/QuestionTypes/EncounterQuestion.tsx | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx b/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx index aefb6da1aa6..a4e28a7529a 100644 --- a/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx +++ b/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx @@ -145,16 +145,7 @@ export function EncounterQuestion({ encounter.status === EncounterStatus.DISCONTINUED || encounter.status === EncounterStatus.ENTERED_IN_ERROR ) { - if (isStartDateInFuture) { - if (encounter.period.end) { - handleUpdateEncounter({ - period: { - ...encounter.period, - end: undefined, - }, - }); - } - } else if (!encounter.period.end) { + if (!encounter.period.end && !isStartDateInFuture) { handleUpdateEncounter({ period: { ...encounter.period, From eec2d98e1266f5db2635e395748c6ba3218f5291 Mon Sep 17 00:00:00 2001 From: Jacob Jeevan Date: Wed, 24 Jun 2026 18:20:47 +0530 Subject: [PATCH 4/6] chore: only allow transition for cancelled/discontinued/entered in error --- .../QuestionTypes/EncounterQuestion.tsx | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx b/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx index a4e28a7529a..587e449a6c8 100644 --- a/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx +++ b/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx @@ -140,12 +140,33 @@ export function EncounterQuestion({ if ( encounter.status === EncounterStatus.DISCHARGED || - encounter.status === EncounterStatus.COMPLETED || + encounter.status === EncounterStatus.COMPLETED + ) { + // Always set end date — if start is in the future, BE will reject it + if (!encounter.period.end) { + handleUpdateEncounter({ + period: { + ...encounter.period, + end: new Date().toISOString(), + }, + }); + } + } else if ( encounter.status === EncounterStatus.CANCELLED || encounter.status === EncounterStatus.DISCONTINUED || encounter.status === EncounterStatus.ENTERED_IN_ERROR ) { - if (!encounter.period.end && !isStartDateInFuture) { + if (isStartDateInFuture) { + // Valid transition from future encounters — don't set end date + if (encounter.period.end) { + handleUpdateEncounter({ + period: { + ...encounter.period, + end: undefined, + }, + }); + } + } else if (!encounter.period.end) { handleUpdateEncounter({ period: { ...encounter.period, From 4b0b8e7058d35324a990e2586d1f2fdd1f52fdf8 Mon Sep 17 00:00:00 2001 From: Jacob Jeevan Date: Thu, 25 Jun 2026 16:11:52 +0530 Subject: [PATCH 5/6] chore: disable discontinued as well --- .../Questionnaire/QuestionTypes/EncounterQuestion.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx b/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx index 587e449a6c8..56b6c63e5e0 100644 --- a/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx +++ b/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx @@ -140,6 +140,7 @@ export function EncounterQuestion({ if ( encounter.status === EncounterStatus.DISCHARGED || + encounter.status === EncounterStatus.DISCONTINUED || encounter.status === EncounterStatus.COMPLETED ) { // Always set end date — if start is in the future, BE will reject it @@ -153,7 +154,6 @@ export function EncounterQuestion({ } } else if ( encounter.status === EncounterStatus.CANCELLED || - encounter.status === EncounterStatus.DISCONTINUED || encounter.status === EncounterStatus.ENTERED_IN_ERROR ) { if (isStartDateInFuture) { From 2313ed5aaeea73e7836c6e2b639cd4de13b887f0 Mon Sep 17 00:00:00 2001 From: Jacob Jeevan Date: Thu, 25 Jun 2026 16:38:45 +0530 Subject: [PATCH 6/6] chore: copilot suggestion --- .../Questionnaire/QuestionTypes/EncounterQuestion.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx b/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx index 56b6c63e5e0..f612c60bf0a 100644 --- a/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx +++ b/src/components/Questionnaire/QuestionTypes/EncounterQuestion.tsx @@ -136,7 +136,7 @@ export function EncounterQuestion({ useEffect(() => { const isStartDateInFuture = - encounter.period.start && new Date(encounter.period.start) > new Date(); + !!encounter.period.start && new Date(encounter.period.start) > new Date(); if ( encounter.status === EncounterStatus.DISCHARGED ||