From 92a05c82cbfd82814047968ed6a029db7f290d2e Mon Sep 17 00:00:00 2001 From: Maryam Mehdizadeh Date: Fri, 10 Jul 2026 14:29:36 +0800 Subject: [PATCH 1/6] fix: show error when answerOption lookup fails instead of showing raw codes (issue #1931) Co-authored-by: Cursor --- .../Population-workflow-for-Allergies-1.png | Bin 0 -> 101474 bytes .../ChoiceSelectAnswerOptionFields.tsx | 11 +++- .../OpenChoiceSelectAnswerOptionField.tsx | 11 +++- .../questionnaireStore.interface.ts | 2 + .../src/stores/questionnaireStore.ts | 5 ++ .../src/test/addDisplayToCodings.test.ts | 47 ++++++++++++++++-- .../addDisplayToCodings.ts | 22 ++++++-- .../createQuestionnaireModel.ts | 10 ++-- 8 files changed, 94 insertions(+), 14 deletions(-) create mode 100644 apps/smart-forms-app/src/test/__screenshots__/aboriginalFormPopulation.test.tsx/Population-workflow-for-Allergies-1.png diff --git a/apps/smart-forms-app/src/test/__screenshots__/aboriginalFormPopulation.test.tsx/Population-workflow-for-Allergies-1.png b/apps/smart-forms-app/src/test/__screenshots__/aboriginalFormPopulation.test.tsx/Population-workflow-for-Allergies-1.png new file mode 100644 index 0000000000000000000000000000000000000000..1921ef6f7b212af13476c1c051b73e9d4a9dd616 GIT binary patch literal 101474 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ν-RbCzI&Rc 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 literal 0 HcmV?d00001 diff --git a/packages/smart-forms-renderer/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx b/packages/smart-forms-renderer/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx index a35b01df8..dd2edb6c8 100644 --- a/packages/smart-forms-renderer/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx +++ b/packages/smart-forms-renderer/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx @@ -24,7 +24,7 @@ import type { PropsWithIsTabledAttribute, PropsWithRenderingExtensionsAttribute } from '../../../interfaces/renderProps.interface'; -import { useRendererConfigStore } from '../../../stores'; +import { useQuestionnaireStore, useRendererConfigStore } from '../../../stores'; import { compareAnswerOptionValue, isOptionDisabled } from '../../../utils/choice'; import { getAnswerOptionLabel } from '../../../utils/openChoice'; import DisplayUnitText from '../ItemParts/DisplayUnitText'; @@ -64,6 +64,8 @@ function ChoiceSelectAnswerOptionFields(props: ChoiceSelectAnswerOptionFieldsPro const readOnlyVisualStyle = useRendererConfigStore.use.readOnlyVisualStyle(); const textFieldWidth = useRendererConfigStore.use.textFieldWidth(); + const answerOptionsLookupFailures = useQuestionnaireStore.use.answerOptionsLookupFailures(); + const lookupFailed = answerOptionsLookupFailures.has(qItem.linkId); const { displayUnit, displayPrompt, entryFormat } = renderingExtensions; @@ -204,6 +206,13 @@ function ChoiceSelectAnswerOptionFields(props: ChoiceSelectAnswerOptionFieldsPro }} /> + {lookupFailed ? ( + + + Unable to load option labels — terminology server may be unavailable + + + ) : null} {feedback ? ( {feedback} diff --git a/packages/smart-forms-renderer/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx b/packages/smart-forms-renderer/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx index 3c7c2ee3b..bc3036441 100644 --- a/packages/smart-forms-renderer/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx +++ b/packages/smart-forms-renderer/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx @@ -28,7 +28,7 @@ import type { PropsWithParentIsReadOnlyAttribute, PropsWithRenderingExtensionsAttribute } from '../../../interfaces/renderProps.interface'; -import { useRendererConfigStore } from '../../../stores'; +import { useQuestionnaireStore, useRendererConfigStore } from '../../../stores'; import DisplayUnitText from '../ItemParts/DisplayUnitText'; import ExpressionUpdateFadingIcon from '../ItemParts/ExpressionUpdateFadingIcon'; import StyledText from '../ItemParts/StyledText'; @@ -67,6 +67,8 @@ function OpenChoiceSelectAnswerOptionField(props: OpenChoiceSelectAnswerOptionFi const readOnlyVisualStyle = useRendererConfigStore.use.readOnlyVisualStyle(); const textFieldWidth = useRendererConfigStore.use.textFieldWidth(); + const answerOptionsLookupFailures = useQuestionnaireStore.use.answerOptionsLookupFailures(); + const lookupFailed = answerOptionsLookupFailures.has(qItem.linkId); const { displayUnit, displayPrompt, entryFormat } = renderingExtensions; @@ -196,6 +198,13 @@ function OpenChoiceSelectAnswerOptionField(props: OpenChoiceSelectAnswerOptionFi }} /> + {lookupFailed ? ( + + + Unable to load option labels — terminology server may be unavailable + + + ) : null} {feedback ? ( {feedback} diff --git a/packages/smart-forms-renderer/src/interfaces/questionnaireStore.interface.ts b/packages/smart-forms-renderer/src/interfaces/questionnaireStore.interface.ts index a2b796373..dd4e59cd2 100644 --- a/packages/smart-forms-renderer/src/interfaces/questionnaireStore.interface.ts +++ b/packages/smart-forms-renderer/src/interfaces/questionnaireStore.interface.ts @@ -42,6 +42,8 @@ export interface QuestionnaireModel { initialExpressions: Record; answerExpressions: Record; answerOptions: Record; + /** linkIds whose answerOption codings had no display and whose $lookup failed */ + answerOptionsLookupFailures: Set; answerOptionsToggleExpressions: Record; processedValueSets: Record; cachedValueSetCodings: Record; diff --git a/packages/smart-forms-renderer/src/stores/questionnaireStore.ts b/packages/smart-forms-renderer/src/stores/questionnaireStore.ts index 02261e932..ecf7d222a 100644 --- a/packages/smart-forms-renderer/src/stores/questionnaireStore.ts +++ b/packages/smart-forms-renderer/src/stores/questionnaireStore.ts @@ -129,6 +129,8 @@ export interface QuestionnaireStoreType { enableWhenIsActivated: boolean; enableWhenExpressions: EnableWhenExpressions; answerOptionsToggleExpressions: Record; + /** linkIds whose answerOption codings had no display and whose $lookup call failed */ + answerOptionsLookupFailures: Set; processedValueSets: Record; cachedValueSetCodings: Record; fhirPathContext: Record; @@ -195,6 +197,7 @@ export const questionnaireStore = createStore()((set, ge targetConstraints: {}, targetConstraintLinkIds: {}, answerOptionsToggleExpressions: {}, + answerOptionsLookupFailures: new Set(), calculatedExpressions: {}, initialExpressions: {}, enableWhenExpressions: { singleExpressions: {}, repeatExpressions: {} }, @@ -279,6 +282,7 @@ export const questionnaireStore = createStore()((set, ge targetConstraints: initialTargetConstraints, targetConstraintLinkIds: targetConstraintLinkIds, answerOptionsToggleExpressions: initialAnswerOptionsToggleExpressions, + answerOptionsLookupFailures: questionnaireModel.answerOptionsLookupFailures, enableWhenItems: initialEnableWhenItems, enableWhenLinkedQuestions: initialEnableWhenLinkedQuestions, enableWhenExpressions: initialEnableWhenExpressions, @@ -309,6 +313,7 @@ export const questionnaireStore = createStore()((set, ge targetConstraints: {}, targetConstraintLinkIds: {}, answerOptionsToggleExpressions: {}, + answerOptionsLookupFailures: new Set(), enableWhenItems: { singleItems: {}, repeatItems: {} }, enableWhenLinkedQuestions: {}, enableWhenExpressions: { singleExpressions: {}, repeatExpressions: {} }, diff --git a/packages/smart-forms-renderer/src/test/addDisplayToCodings.test.ts b/packages/smart-forms-renderer/src/test/addDisplayToCodings.test.ts index 059f179d3..aeb4317ad 100644 --- a/packages/smart-forms-renderer/src/test/addDisplayToCodings.test.ts +++ b/packages/smart-forms-renderer/src/test/addDisplayToCodings.test.ts @@ -180,12 +180,13 @@ describe('addDisplayToCodings - Phase 5', () => { ] }; - const result = await addDisplayToAnswerOptions( + const { answerOptions: result, lookupFailedLinkIds } = await addDisplayToAnswerOptions( answerOptions, 'http://terminology.hl7.org/fhir' ); expect(result).toEqual(answerOptions); + expect(lookupFailedLinkIds.size).toBe(0); expect(mockClient).not.toHaveBeenCalled(); }); @@ -212,7 +213,7 @@ describe('addDisplayToCodings - Phase 5', () => { const mockRequest = jest.fn().mockResolvedValue(mockLookupResponse); mockClient.mockReturnValue({ request: mockRequest } as any); - const result = await addDisplayToAnswerOptions( + const { answerOptions: result, lookupFailedLinkIds } = await addDisplayToAnswerOptions( answerOptions, 'http://terminology.hl7.org/fhir' ); @@ -224,17 +225,54 @@ describe('addDisplayToCodings - Phase 5', () => { expect(result.item1[0].valueCoding?.display).toBe('Fever'); expect(result.item1[1].valueCoding?.display).toBe('Existing'); expect(result.item1[2]).toEqual({ valueString: 'text option' }); + expect(lookupFailedLinkIds.size).toBe(0); + }); + + it('should report lookupFailedLinkIds when terminology server is unavailable', async () => { + // This is the bug reported in issue #1931: + // When the terminology server is down, codings without displays still have no display after + // lookup. Previously the UI would silently fall back to showing the raw code. Now + // lookupFailedLinkIds records which items had this failure so the UI can show an error. + const answerOptions = { + 'carer-type': [ + { valueCoding: { system: 'http://snomed.info/sct', code: '133932002' } }, // no display + { valueCoding: { system: 'http://snomed.info/sct', code: '394738000' } } // no display + ], + 'relationship-type': [ + { valueCoding: { system: 'http://snomed.info/sct', code: '72705000', display: 'Mother' } } // already has display + ] + }; + + const mockRequest = jest.fn().mockRejectedValue(new Error('Network Error')); + mockClient.mockReturnValue({ request: mockRequest } as any); + + const { answerOptions: result, lookupFailedLinkIds } = await addDisplayToAnswerOptions( + answerOptions, + 'http://terminology.hl7.org/fhir' + ); + + // Displays remain undefined because lookups failed + expect(result['carer-type'][0].valueCoding?.display).toBeUndefined(); + expect(result['carer-type'][1].valueCoding?.display).toBeUndefined(); + // Item with existing display is unaffected + expect(result['relationship-type'][0].valueCoding?.display).toBe('Mother'); + + // The linkId whose lookup failed is tracked so the UI can warn the user + expect(lookupFailedLinkIds.has('carer-type')).toBe(true); + // Items that already had displays and didn't need a lookup are NOT flagged + expect(lookupFailedLinkIds.has('relationship-type')).toBe(false); }); it('should handle empty answer options', async () => { const answerOptions = {}; - const result = await addDisplayToAnswerOptions( + const { answerOptions: result, lookupFailedLinkIds } = await addDisplayToAnswerOptions( answerOptions, 'http://terminology.hl7.org/fhir' ); expect(result).toEqual({}); + expect(lookupFailedLinkIds.size).toBe(0); expect(mockClient).not.toHaveBeenCalled(); }); @@ -243,12 +281,13 @@ describe('addDisplayToCodings - Phase 5', () => { item1: [] }; - const result = await addDisplayToAnswerOptions( + const { answerOptions: result, lookupFailedLinkIds } = await addDisplayToAnswerOptions( answerOptions, 'http://terminology.hl7.org/fhir' ); expect(result).toEqual(answerOptions); + expect(lookupFailedLinkIds.size).toBe(0); expect(mockClient).not.toHaveBeenCalled(); }); }); diff --git a/packages/smart-forms-renderer/src/utils/questionnaireStoreUtils/addDisplayToCodings.ts b/packages/smart-forms-renderer/src/utils/questionnaireStoreUtils/addDisplayToCodings.ts index 9a698b46d..2b5ed0ff9 100644 --- a/packages/smart-forms-renderer/src/utils/questionnaireStoreUtils/addDisplayToCodings.ts +++ b/packages/smart-forms-renderer/src/utils/questionnaireStoreUtils/addDisplayToCodings.ts @@ -55,13 +55,22 @@ export async function addDisplayToCacheCodings( return cachedValueSetCodings; } +export interface AnswerOptionsLookupResult { + answerOptions: Record; + /** linkIds whose codings had no display and whose $lookup call failed or returned no display */ + lookupFailedLinkIds: Set; +} + // Use this for a Record export async function addDisplayToAnswerOptions( answerOptions: Record, terminologyServerUrl: string -): Promise> { - // Store code system lookup promises for codings without displays +): Promise { + // Store code system lookup promises for codings without displays. + // Also track which linkIds need a lookup so we can identify failures afterward. const codeSystemLookupPromises: Record = {}; + const linkIdsNeedingLookup = new Set(); + for (const key in answerOptions) { const options = answerOptions[key]; for (const option of options) { @@ -71,12 +80,15 @@ export async function addDisplayToAnswerOptions( promise: getCodeSystemLookupPromise(query, terminologyServerUrl), oldCoding: option.valueCoding }; + linkIdsNeedingLookup.add(key); } } } // Resolves lookup promises in one go and assign newCodings to processedCodings const resolvedCodeSystemLookupPromises = await resolveLookupPromises(codeSystemLookupPromises); + const lookupFailedLinkIds = new Set(); + for (const key in answerOptions) { const options = answerOptions[key]; @@ -86,12 +98,16 @@ export async function addDisplayToAnswerOptions( const resolvedLookup = resolvedCodeSystemLookupPromises[lookUpKey]; if (resolvedLookup?.newCoding?.display) { option.valueCoding.display = resolvedLookup.newCoding.display; + } else if (linkIdsNeedingLookup.has(key) && !option.valueCoding.display) { + // This linkId had codings that needed a lookup but the display is still missing — + // either the $lookup request failed or the server returned no display value. + lookupFailedLinkIds.add(key); } } } } - return answerOptions; + return { answerOptions, lookupFailedLinkIds }; } // Use this for an array of codings diff --git a/packages/smart-forms-renderer/src/utils/questionnaireStoreUtils/createQuestionnaireModel.ts b/packages/smart-forms-renderer/src/utils/questionnaireStoreUtils/createQuestionnaireModel.ts index 9abd06280..e803071d1 100644 --- a/packages/smart-forms-renderer/src/utils/questionnaireStoreUtils/createQuestionnaireModel.ts +++ b/packages/smart-forms-renderer/src/utils/questionnaireStoreUtils/createQuestionnaireModel.ts @@ -104,11 +104,10 @@ export async function createQuestionnaireModel( terminologyServerUrl ); - // In answerOptions, add display values to codings lacking them - const completeAnswerOptions = await addDisplayToAnswerOptions( - answerOptions, - terminologyServerUrl - ); + // In answerOptions, add display values to codings lacking them. + // lookupFailedLinkIds contains linkIds where the $lookup call failed so the UI can warn the user. + const { answerOptions: completeAnswerOptions, lookupFailedLinkIds: answerOptionsLookupFailures } = + await addDisplayToAnswerOptions(answerOptions, terminologyServerUrl); return { itemMap, @@ -124,6 +123,7 @@ export async function createQuestionnaireModel( initialExpressions, answerExpressions, answerOptions: completeAnswerOptions, + answerOptionsLookupFailures, answerOptionsToggleExpressions: answerOptionsToggleExpressions, processedValueSets, cachedValueSetCodings, From 571d79e37cb916d961a0c88a6717d1a925444dd9 Mon Sep 17 00:00:00 2001 From: Maryam Mehdizadeh Date: Fri, 10 Jul 2026 14:44:10 +0800 Subject: [PATCH 2/6] fix: add answerOptionsLookupFailures to createEmptyModel to fix build error Co-authored-by: Cursor --- .../utils/questionnaireStoreUtils/createQuestionnaireModel.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/smart-forms-renderer/src/utils/questionnaireStoreUtils/createQuestionnaireModel.ts b/packages/smart-forms-renderer/src/utils/questionnaireStoreUtils/createQuestionnaireModel.ts index e803071d1..cb8ebead5 100644 --- a/packages/smart-forms-renderer/src/utils/questionnaireStoreUtils/createQuestionnaireModel.ts +++ b/packages/smart-forms-renderer/src/utils/questionnaireStoreUtils/createQuestionnaireModel.ts @@ -146,6 +146,7 @@ function createEmptyModel(): QuestionnaireModel { enableWhenExpressions: { singleExpressions: {}, repeatExpressions: {} }, answerExpressions: {}, answerOptions: {}, + answerOptionsLookupFailures: new Set(), answerOptionsToggleExpressions: {}, enableWhenItems: { singleItems: {}, repeatItems: {} }, processedValueSets: {}, From a4f6d4583d3e41418b764fdc3d01b0a3d7dbbf3d Mon Sep 17 00:00:00 2001 From: Maryam Mehdizadeh Date: Fri, 10 Jul 2026 15:00:21 +0800 Subject: [PATCH 3/6] fix: disable choice dropdown when answerOption lookup fails (issue #1931) Co-authored-by: Cursor --- .../ChoiceItems/ChoiceSelectAnswerOptionFields.tsx | 2 +- .../OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/smart-forms-renderer/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx b/packages/smart-forms-renderer/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx index dd2edb6c8..10d72c106 100644 --- a/packages/smart-forms-renderer/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx +++ b/packages/smart-forms-renderer/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx @@ -125,7 +125,7 @@ function ChoiceSelectAnswerOptionFields(props: ChoiceSelectAnswerOptionFieldsPro autoHighlight sx={{ '& .MuiAutocomplete-tag': { mx: 0 } }} size="small" - disabled={readOnly && readOnlyVisualStyle === 'disabled'} + disabled={lookupFailed || (readOnly && readOnlyVisualStyle === 'disabled')} readOnly={readOnly && readOnlyVisualStyle === 'readonly'} renderInput={(params) => { // Merge instructionsId with any existing aria-describedby from Autocomplete diff --git a/packages/smart-forms-renderer/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx b/packages/smart-forms-renderer/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx index bc3036441..77e891527 100644 --- a/packages/smart-forms-renderer/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx +++ b/packages/smart-forms-renderer/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx @@ -119,7 +119,7 @@ function OpenChoiceSelectAnswerOptionField(props: OpenChoiceSelectAnswerOptionFi freeSolo autoHighlight sx={{ '& .MuiAutocomplete-tag': { mx: 0 } }} - disabled={readOnly && readOnlyVisualStyle === 'disabled'} + disabled={lookupFailed || (readOnly && readOnlyVisualStyle === 'disabled')} readOnly={readOnly && readOnlyVisualStyle === 'readonly'} size="small" renderInput={(params) => ( From 2d8c6b3b739741639ae73ff1cf9c227746161bfd Mon Sep 17 00:00:00 2001 From: Maryam Mehdizadeh Date: Fri, 10 Jul 2026 15:15:40 +0800 Subject: [PATCH 4/6] refactor: use StyledAlert pattern for answerOption lookup failure (issue #1931) Co-authored-by: Cursor --- .../ChoiceSelectAnswerOptionFields.tsx | 26 +++++++++++++------ .../OpenChoiceSelectAnswerOptionField.tsx | 24 +++++++++++------ 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/packages/smart-forms-renderer/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx b/packages/smart-forms-renderer/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx index 10d72c106..d4e4870e5 100644 --- a/packages/smart-forms-renderer/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx +++ b/packages/smart-forms-renderer/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx @@ -19,6 +19,9 @@ import React from 'react'; import Autocomplete from '@mui/material/Autocomplete'; import FormControl from '@mui/material/FormControl'; import FormHelperText from '@mui/material/FormHelperText'; +import Typography from '@mui/material/Typography'; +// @ts-ignore: Module has no declaration file +import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline'; import type { QuestionnaireItem, QuestionnaireItemAnswerOption } from 'fhir/r4'; import type { PropsWithIsTabledAttribute, @@ -32,6 +35,7 @@ import ExpressionUpdateFadingIcon from '../ItemParts/ExpressionUpdateFadingIcon' import { StandardTextField } from '../Textfield.styles'; import StyledText from '../ItemParts/StyledText'; import AccessibleFeedback from '../ItemParts/AccessibleFeedback'; +import { StyledAlert } from '../../Alert.styles'; interface ChoiceSelectAnswerOptionFieldsProps extends PropsWithIsTabledAttribute, @@ -75,6 +79,19 @@ function ChoiceSelectAnswerOptionFields(props: ChoiceSelectAnswerOptionFieldsPro const [currentValueSelect, setCurrentValueSelect] = React.useState(valueSelect); + // Terminology server could not resolve displays for this item's answerOptions — show the same + // StyledAlert pattern used by answerValueSet fields to keep the UI consistent. + if (lookupFailed) { + return ( + + + + Unable to load option labels — terminology server may be unavailable + + + ); + } + return ( { // Merge instructionsId with any existing aria-describedby from Autocomplete @@ -206,13 +223,6 @@ function ChoiceSelectAnswerOptionFields(props: ChoiceSelectAnswerOptionFieldsPro }} /> - {lookupFailed ? ( - - - Unable to load option labels — terminology server may be unavailable - - - ) : null} {feedback ? ( {feedback} diff --git a/packages/smart-forms-renderer/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx b/packages/smart-forms-renderer/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx index 77e891527..a4bd15dd2 100644 --- a/packages/smart-forms-renderer/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx +++ b/packages/smart-forms-renderer/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx @@ -22,6 +22,9 @@ import type { AutocompleteChangeReason } from '@mui/material/Autocomplete'; import Autocomplete from '@mui/material/Autocomplete'; import FormControl from '@mui/material/FormControl'; import FormHelperText from '@mui/material/FormHelperText'; +import Typography from '@mui/material/Typography'; +// @ts-ignore: Module has no declaration file +import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline'; import type { QuestionnaireItem, QuestionnaireItemAnswerOption } from 'fhir/r4'; import type { PropsWithIsTabledAttribute, @@ -33,6 +36,7 @@ import DisplayUnitText from '../ItemParts/DisplayUnitText'; import ExpressionUpdateFadingIcon from '../ItemParts/ExpressionUpdateFadingIcon'; import StyledText from '../ItemParts/StyledText'; import AccessibleFeedback from '../ItemParts/AccessibleFeedback'; +import { StyledAlert } from '../../Alert.styles'; interface OpenChoiceSelectAnswerOptionFieldProps extends PropsWithIsTabledAttribute, @@ -74,6 +78,17 @@ function OpenChoiceSelectAnswerOptionField(props: OpenChoiceSelectAnswerOptionFi const [inputValue, setInputValue] = React.useState(''); + if (lookupFailed) { + return ( + + + + Unable to load option labels — terminology server may be unavailable + + + ); + } + return ( ( @@ -198,13 +213,6 @@ function OpenChoiceSelectAnswerOptionField(props: OpenChoiceSelectAnswerOptionFi }} /> - {lookupFailed ? ( - - - Unable to load option labels — terminology server may be unavailable - - - ) : null} {feedback ? ( {feedback} From 7f0800b81785c8818755fb09fd83bba34ab2ca74 Mon Sep 17 00:00:00 2001 From: Maryam Mehdizadeh Date: Fri, 10 Jul 2026 15:36:29 +0800 Subject: [PATCH 5/6] fix: add answerOptionsLookupFailures to questionnaireStore test mock Co-authored-by: Cursor --- .../src/test/stores/questionnaireStore.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/smart-forms-renderer/src/test/stores/questionnaireStore.test.ts b/packages/smart-forms-renderer/src/test/stores/questionnaireStore.test.ts index 4ab705911..ad3cbc977 100644 --- a/packages/smart-forms-renderer/src/test/stores/questionnaireStore.test.ts +++ b/packages/smart-forms-renderer/src/test/stores/questionnaireStore.test.ts @@ -123,7 +123,8 @@ describe('questionnaireStore', () => { cachedValueSetCodings: {}, fhirPathContext: {}, fhirPathTerminologyCache: {}, - answerOptions: {} + answerOptions: {}, + answerOptionsLookupFailures: new Set() }; const mockInitialiseFormResult = { From b6079aba3f90d13acf6f4aa4142d24d1f857e636 Mon Sep 17 00:00:00 2001 From: Maryam Mehdizadeh Date: Mon, 20 Jul 2026 08:29:50 +0800 Subject: [PATCH 6/6] refactor(#1931): track lookup failures per-coding key instead of per-linkId MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Switch answerOptionsLookupFailures from tracking linkIds to individual coding keys (system|code). The dropdown now stays accessible and shows a bracketed code fallback (e.g. [133932002]) for each option that could not be resolved, with a single amber warning below the field for partial failures — keeping successfully-resolved options fully labelled. Co-authored-by: Cursor --- .../ChoiceSelectAnswerOptionFields.tsx | 60 +++++++++++-------- .../OpenChoiceSelectAnswerOptionField.tsx | 56 ++++++++++------- .../questionnaireStore.interface.ts | 2 +- .../src/stores/questionnaireStore.ts | 2 +- .../src/test/addDisplayToCodings.test.ts | 32 +++++----- .../addDisplayToCodings.ts | 28 +++++---- .../createQuestionnaireModel.ts | 6 +- 7 files changed, 108 insertions(+), 78 deletions(-) diff --git a/packages/smart-forms-renderer/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx b/packages/smart-forms-renderer/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx index d4e4870e5..33b5732f5 100644 --- a/packages/smart-forms-renderer/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx +++ b/packages/smart-forms-renderer/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx @@ -19,9 +19,6 @@ import React from 'react'; import Autocomplete from '@mui/material/Autocomplete'; import FormControl from '@mui/material/FormControl'; import FormHelperText from '@mui/material/FormHelperText'; -import Typography from '@mui/material/Typography'; -// @ts-ignore: Module has no declaration file -import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline'; import type { QuestionnaireItem, QuestionnaireItemAnswerOption } from 'fhir/r4'; import type { PropsWithIsTabledAttribute, @@ -35,7 +32,6 @@ import ExpressionUpdateFadingIcon from '../ItemParts/ExpressionUpdateFadingIcon' import { StandardTextField } from '../Textfield.styles'; import StyledText from '../ItemParts/StyledText'; import AccessibleFeedback from '../ItemParts/AccessibleFeedback'; -import { StyledAlert } from '../../Alert.styles'; interface ChoiceSelectAnswerOptionFieldsProps extends PropsWithIsTabledAttribute, @@ -69,7 +65,27 @@ function ChoiceSelectAnswerOptionFields(props: ChoiceSelectAnswerOptionFieldsPro const readOnlyVisualStyle = useRendererConfigStore.use.readOnlyVisualStyle(); const textFieldWidth = useRendererConfigStore.use.textFieldWidth(); const answerOptionsLookupFailures = useQuestionnaireStore.use.answerOptionsLookupFailures(); - const lookupFailed = answerOptionsLookupFailures.has(qItem.linkId); + + // Derive per-field failure flag and a label getter that shows [code] for any option + // whose display couldn't be resolved, keeping successfully-resolved options unchanged. + const hasLookupFailure = options.some( + (opt) => + opt.valueCoding && + !opt.valueCoding.display && + answerOptionsLookupFailures.has(`${opt.valueCoding.system}|${opt.valueCoding.code}`) + ); + + function getLabelWithFallback(option: QuestionnaireItemAnswerOption | string): string { + if (typeof option === 'string') return option; + if ( + option.valueCoding && + !option.valueCoding.display && + answerOptionsLookupFailures.has(`${option.valueCoding.system}|${option.valueCoding.code}`) + ) { + return `[${option.valueCoding.code}]`; + } + return getAnswerOptionLabel(option); + } const { displayUnit, displayPrompt, entryFormat } = renderingExtensions; @@ -79,19 +95,6 @@ function ChoiceSelectAnswerOptionFields(props: ChoiceSelectAnswerOptionFieldsPro const [currentValueSelect, setCurrentValueSelect] = React.useState(valueSelect); - // Terminology server could not resolve displays for this item's answerOptions — show the same - // StyledAlert pattern used by answerValueSet fields to keep the UI consistent. - if (lookupFailed) { - return ( - - - - Unable to load option labels — terminology server may be unavailable - - - ); - } - return ( isOptionDisabled(option, answerOptionsToggleExpressionsMap)} - getOptionLabel={(option) => getAnswerOptionLabel(option)} + getOptionLabel={(option) => getLabelWithFallback(option)} isOptionEqualToValue={(option, value) => compareAnswerOptionValue(option, value)} onChange={(_, newValue) => { onSelectChange(newValue); @@ -117,7 +120,7 @@ function ChoiceSelectAnswerOptionFields(props: ChoiceSelectAnswerOptionFieldsPro if (!inputValue && valueSelect && reason !== 'clear') { // Convert current input value to be the current value plus additional input onSelectChange(null); - setInputValue(getAnswerOptionLabel(valueSelect) + newInputValue); + setInputValue(getLabelWithFallback(valueSelect) + newInputValue); } else { setInputValue(newInputValue); } @@ -134,7 +137,7 @@ function ChoiceSelectAnswerOptionFields(props: ChoiceSelectAnswerOptionFieldsPro if (!inputValue && valueSelect) { // Convert current selection to input value on backspace when input is empty onSelectChange(null); - setInputValue(getAnswerOptionLabel(valueSelect)); + setInputValue(getLabelWithFallback(valueSelect)); } } }} @@ -194,11 +197,11 @@ function ChoiceSelectAnswerOptionFields(props: ChoiceSelectAnswerOptionFieldsPro {option.valueString ? ( ) : ( - getAnswerOptionLabel(option) + getLabelWithFallback(option) )} @@ -212,17 +215,24 @@ function ChoiceSelectAnswerOptionFields(props: ChoiceSelectAnswerOptionFieldsPro {value.valueString && selectedOption ? ( ) : ( - getAnswerOptionLabel(value) + getLabelWithFallback(value) )} ); }} /> + {hasLookupFailure ? ( + + + Some option labels could not be loaded — terminology server may be unavailable + + + ) : null} {feedback ? ( {feedback} diff --git a/packages/smart-forms-renderer/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx b/packages/smart-forms-renderer/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx index a4bd15dd2..aa3b64bc3 100644 --- a/packages/smart-forms-renderer/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx +++ b/packages/smart-forms-renderer/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx @@ -22,9 +22,6 @@ import type { AutocompleteChangeReason } from '@mui/material/Autocomplete'; import Autocomplete from '@mui/material/Autocomplete'; import FormControl from '@mui/material/FormControl'; import FormHelperText from '@mui/material/FormHelperText'; -import Typography from '@mui/material/Typography'; -// @ts-ignore: Module has no declaration file -import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline'; import type { QuestionnaireItem, QuestionnaireItemAnswerOption } from 'fhir/r4'; import type { PropsWithIsTabledAttribute, @@ -36,7 +33,6 @@ import DisplayUnitText from '../ItemParts/DisplayUnitText'; import ExpressionUpdateFadingIcon from '../ItemParts/ExpressionUpdateFadingIcon'; import StyledText from '../ItemParts/StyledText'; import AccessibleFeedback from '../ItemParts/AccessibleFeedback'; -import { StyledAlert } from '../../Alert.styles'; interface OpenChoiceSelectAnswerOptionFieldProps extends PropsWithIsTabledAttribute, @@ -72,23 +68,30 @@ function OpenChoiceSelectAnswerOptionField(props: OpenChoiceSelectAnswerOptionFi const readOnlyVisualStyle = useRendererConfigStore.use.readOnlyVisualStyle(); const textFieldWidth = useRendererConfigStore.use.textFieldWidth(); const answerOptionsLookupFailures = useQuestionnaireStore.use.answerOptionsLookupFailures(); - const lookupFailed = answerOptionsLookupFailures.has(qItem.linkId); + + const hasLookupFailure = options.some( + (opt) => + opt.valueCoding && + !opt.valueCoding.display && + answerOptionsLookupFailures.has(`${opt.valueCoding.system}|${opt.valueCoding.code}`) + ); + + function getLabelWithFallback(option: QuestionnaireItemAnswerOption | string): string { + if (typeof option === 'string') return option; + if ( + option.valueCoding && + !option.valueCoding.display && + answerOptionsLookupFailures.has(`${option.valueCoding.system}|${option.valueCoding.code}`) + ) { + return `[${option.valueCoding.code}]`; + } + return getAnswerOptionLabel(option); + } const { displayUnit, displayPrompt, entryFormat } = renderingExtensions; const [inputValue, setInputValue] = React.useState(''); - if (lookupFailed) { - return ( - - - - Unable to load option labels — terminology server may be unavailable - - - ); - } - return ( getAnswerOptionLabel(option)} + getOptionLabel={(option) => getLabelWithFallback(option)} onChange={(_, newValue, reason) => onValueChange(newValue, reason)} inputValue={inputValue} onInputChange={(_, newInputValue, reason) => { if (!inputValue && valueSelect && reason !== 'clear') { // Convert current input value to be the current value plus additional input onValueChange(null, 'clear'); - setInputValue(getAnswerOptionLabel(valueSelect) + newInputValue); + setInputValue(getLabelWithFallback(valueSelect) + newInputValue); } else { setInputValue(newInputValue); } @@ -126,7 +129,7 @@ function OpenChoiceSelectAnswerOptionField(props: OpenChoiceSelectAnswerOptionFi if (!inputValue && valueSelect) { // Convert current selection to input value on backspace when input is empty onValueChange(null, 'clear'); - setInputValue(getAnswerOptionLabel(valueSelect)); + setInputValue(getLabelWithFallback(valueSelect)); } } }} @@ -179,11 +182,11 @@ function OpenChoiceSelectAnswerOptionField(props: OpenChoiceSelectAnswerOptionFi {option.valueString ? ( ) : ( - getAnswerOptionLabel(option) + getLabelWithFallback(option) )} @@ -202,17 +205,24 @@ function OpenChoiceSelectAnswerOptionField(props: OpenChoiceSelectAnswerOptionFi {typeof value !== 'string' && value.valueString && selectedOption ? ( ) : ( - getAnswerOptionLabel(value) + getLabelWithFallback(value) )} ); }} /> + {hasLookupFailure ? ( + + + Some option labels could not be loaded — terminology server may be unavailable + + + ) : null} {feedback ? ( {feedback} diff --git a/packages/smart-forms-renderer/src/interfaces/questionnaireStore.interface.ts b/packages/smart-forms-renderer/src/interfaces/questionnaireStore.interface.ts index dd4e59cd2..9f7d81ea7 100644 --- a/packages/smart-forms-renderer/src/interfaces/questionnaireStore.interface.ts +++ b/packages/smart-forms-renderer/src/interfaces/questionnaireStore.interface.ts @@ -42,7 +42,7 @@ export interface QuestionnaireModel { initialExpressions: Record; answerExpressions: Record; answerOptions: Record; - /** linkIds whose answerOption codings had no display and whose $lookup failed */ + /** Per-coding keys (`${system}|${code}`) where $lookup failed — individual options can be labelled with their code as fallback */ answerOptionsLookupFailures: Set; answerOptionsToggleExpressions: Record; processedValueSets: Record; diff --git a/packages/smart-forms-renderer/src/stores/questionnaireStore.ts b/packages/smart-forms-renderer/src/stores/questionnaireStore.ts index ecf7d222a..c22ac42d3 100644 --- a/packages/smart-forms-renderer/src/stores/questionnaireStore.ts +++ b/packages/smart-forms-renderer/src/stores/questionnaireStore.ts @@ -129,7 +129,7 @@ export interface QuestionnaireStoreType { enableWhenIsActivated: boolean; enableWhenExpressions: EnableWhenExpressions; answerOptionsToggleExpressions: Record; - /** linkIds whose answerOption codings had no display and whose $lookup call failed */ + /** Per-coding keys (`${system}|${code}`) where $lookup failed — options can show a fallback label */ answerOptionsLookupFailures: Set; processedValueSets: Record; cachedValueSetCodings: Record; diff --git a/packages/smart-forms-renderer/src/test/addDisplayToCodings.test.ts b/packages/smart-forms-renderer/src/test/addDisplayToCodings.test.ts index aeb4317ad..8f138d3e8 100644 --- a/packages/smart-forms-renderer/src/test/addDisplayToCodings.test.ts +++ b/packages/smart-forms-renderer/src/test/addDisplayToCodings.test.ts @@ -180,13 +180,13 @@ describe('addDisplayToCodings - Phase 5', () => { ] }; - const { answerOptions: result, lookupFailedLinkIds } = await addDisplayToAnswerOptions( + const { answerOptions: result, lookupFailedCodingKeys } = await addDisplayToAnswerOptions( answerOptions, 'http://terminology.hl7.org/fhir' ); expect(result).toEqual(answerOptions); - expect(lookupFailedLinkIds.size).toBe(0); + expect(lookupFailedCodingKeys.size).toBe(0); expect(mockClient).not.toHaveBeenCalled(); }); @@ -213,7 +213,7 @@ describe('addDisplayToCodings - Phase 5', () => { const mockRequest = jest.fn().mockResolvedValue(mockLookupResponse); mockClient.mockReturnValue({ request: mockRequest } as any); - const { answerOptions: result, lookupFailedLinkIds } = await addDisplayToAnswerOptions( + const { answerOptions: result, lookupFailedCodingKeys } = await addDisplayToAnswerOptions( answerOptions, 'http://terminology.hl7.org/fhir' ); @@ -225,14 +225,15 @@ describe('addDisplayToCodings - Phase 5', () => { expect(result.item1[0].valueCoding?.display).toBe('Fever'); expect(result.item1[1].valueCoding?.display).toBe('Existing'); expect(result.item1[2]).toEqual({ valueString: 'text option' }); - expect(lookupFailedLinkIds.size).toBe(0); + expect(lookupFailedCodingKeys.size).toBe(0); }); - it('should report lookupFailedLinkIds when terminology server is unavailable', async () => { + it('should report lookupFailedCodingKeys when terminology server is unavailable', async () => { // This is the bug reported in issue #1931: // When the terminology server is down, codings without displays still have no display after // lookup. Previously the UI would silently fall back to showing the raw code. Now - // lookupFailedLinkIds records which items had this failure so the UI can show an error. + // lookupFailedCodingKeys records which individual codings had this failure so the UI can + // show a bracketed fallback label per option (e.g. "[133932002]") and an amber warning. const answerOptions = { 'carer-type': [ { valueCoding: { system: 'http://snomed.info/sct', code: '133932002' } }, // no display @@ -246,7 +247,7 @@ describe('addDisplayToCodings - Phase 5', () => { const mockRequest = jest.fn().mockRejectedValue(new Error('Network Error')); mockClient.mockReturnValue({ request: mockRequest } as any); - const { answerOptions: result, lookupFailedLinkIds } = await addDisplayToAnswerOptions( + const { answerOptions: result, lookupFailedCodingKeys } = await addDisplayToAnswerOptions( answerOptions, 'http://terminology.hl7.org/fhir' ); @@ -257,22 +258,23 @@ describe('addDisplayToCodings - Phase 5', () => { // Item with existing display is unaffected expect(result['relationship-type'][0].valueCoding?.display).toBe('Mother'); - // The linkId whose lookup failed is tracked so the UI can warn the user - expect(lookupFailedLinkIds.has('carer-type')).toBe(true); - // Items that already had displays and didn't need a lookup are NOT flagged - expect(lookupFailedLinkIds.has('relationship-type')).toBe(false); + // Each failing coding is tracked individually by its system|code key + expect(lookupFailedCodingKeys.has('http://snomed.info/sct|133932002')).toBe(true); + expect(lookupFailedCodingKeys.has('http://snomed.info/sct|394738000')).toBe(true); + // Codings that already had displays and didn't need a lookup are NOT flagged + expect(lookupFailedCodingKeys.has('http://snomed.info/sct|72705000')).toBe(false); }); it('should handle empty answer options', async () => { const answerOptions = {}; - const { answerOptions: result, lookupFailedLinkIds } = await addDisplayToAnswerOptions( + const { answerOptions: result, lookupFailedCodingKeys } = await addDisplayToAnswerOptions( answerOptions, 'http://terminology.hl7.org/fhir' ); expect(result).toEqual({}); - expect(lookupFailedLinkIds.size).toBe(0); + expect(lookupFailedCodingKeys.size).toBe(0); expect(mockClient).not.toHaveBeenCalled(); }); @@ -281,13 +283,13 @@ describe('addDisplayToCodings - Phase 5', () => { item1: [] }; - const { answerOptions: result, lookupFailedLinkIds } = await addDisplayToAnswerOptions( + const { answerOptions: result, lookupFailedCodingKeys } = await addDisplayToAnswerOptions( answerOptions, 'http://terminology.hl7.org/fhir' ); expect(result).toEqual(answerOptions); - expect(lookupFailedLinkIds.size).toBe(0); + expect(lookupFailedCodingKeys.size).toBe(0); expect(mockClient).not.toHaveBeenCalled(); }); }); diff --git a/packages/smart-forms-renderer/src/utils/questionnaireStoreUtils/addDisplayToCodings.ts b/packages/smart-forms-renderer/src/utils/questionnaireStoreUtils/addDisplayToCodings.ts index 2b5ed0ff9..2847833e3 100644 --- a/packages/smart-forms-renderer/src/utils/questionnaireStoreUtils/addDisplayToCodings.ts +++ b/packages/smart-forms-renderer/src/utils/questionnaireStoreUtils/addDisplayToCodings.ts @@ -57,8 +57,12 @@ export async function addDisplayToCacheCodings( export interface AnswerOptionsLookupResult { answerOptions: Record; - /** linkIds whose codings had no display and whose $lookup call failed or returned no display */ - lookupFailedLinkIds: Set; + /** + * Per-coding keys (`${system}|${code}`) where the $lookup call failed or returned no display. + * Granular enough to show a fallback label per individual option that couldn't be resolved, + * while leaving successfully-resolved options in the same dropdown unaffected. + */ + lookupFailedCodingKeys: Set; } // Use this for a Record @@ -67,9 +71,9 @@ export async function addDisplayToAnswerOptions( terminologyServerUrl: string ): Promise { // Store code system lookup promises for codings without displays. - // Also track which linkIds need a lookup so we can identify failures afterward. + // Track each coding key (system|code) that needed a lookup so we can identify failures afterward. const codeSystemLookupPromises: Record = {}; - const linkIdsNeedingLookup = new Set(); + const codingKeysNeedingLookup = new Set(); for (const key in answerOptions) { const options = answerOptions[key]; @@ -80,14 +84,14 @@ export async function addDisplayToAnswerOptions( promise: getCodeSystemLookupPromise(query, terminologyServerUrl), oldCoding: option.valueCoding }; - linkIdsNeedingLookup.add(key); + codingKeysNeedingLookup.add(`${option.valueCoding.system}|${option.valueCoding.code}`); } } } // Resolves lookup promises in one go and assign newCodings to processedCodings const resolvedCodeSystemLookupPromises = await resolveLookupPromises(codeSystemLookupPromises); - const lookupFailedLinkIds = new Set(); + const lookupFailedCodingKeys = new Set(); for (const key in answerOptions) { const options = answerOptions[key]; @@ -95,19 +99,21 @@ export async function addDisplayToAnswerOptions( for (const option of options) { if (option.valueCoding) { const lookUpKey = `system=${option.valueCoding.system}&code=${option.valueCoding.code}`; + const codingKey = `${option.valueCoding.system}|${option.valueCoding.code}`; const resolvedLookup = resolvedCodeSystemLookupPromises[lookUpKey]; if (resolvedLookup?.newCoding?.display) { option.valueCoding.display = resolvedLookup.newCoding.display; - } else if (linkIdsNeedingLookup.has(key) && !option.valueCoding.display) { - // This linkId had codings that needed a lookup but the display is still missing — - // either the $lookup request failed or the server returned no display value. - lookupFailedLinkIds.add(key); + } else if (codingKeysNeedingLookup.has(codingKey) && !option.valueCoding.display) { + // This coding needed a lookup but still has no display — the $lookup request either + // failed or the server returned no display value. Track it so individual options can + // show a fallback label (e.g. "[133932002]") instead of the raw code silently. + lookupFailedCodingKeys.add(codingKey); } } } } - return { answerOptions, lookupFailedLinkIds }; + return { answerOptions, lookupFailedCodingKeys }; } // Use this for an array of codings diff --git a/packages/smart-forms-renderer/src/utils/questionnaireStoreUtils/createQuestionnaireModel.ts b/packages/smart-forms-renderer/src/utils/questionnaireStoreUtils/createQuestionnaireModel.ts index cb8ebead5..8bc175767 100644 --- a/packages/smart-forms-renderer/src/utils/questionnaireStoreUtils/createQuestionnaireModel.ts +++ b/packages/smart-forms-renderer/src/utils/questionnaireStoreUtils/createQuestionnaireModel.ts @@ -106,8 +106,10 @@ export async function createQuestionnaireModel( // In answerOptions, add display values to codings lacking them. // lookupFailedLinkIds contains linkIds where the $lookup call failed so the UI can warn the user. - const { answerOptions: completeAnswerOptions, lookupFailedLinkIds: answerOptionsLookupFailures } = - await addDisplayToAnswerOptions(answerOptions, terminologyServerUrl); + const { + answerOptions: completeAnswerOptions, + lookupFailedCodingKeys: answerOptionsLookupFailures + } = await addDisplayToAnswerOptions(answerOptions, terminologyServerUrl); return { itemMap,